Я успешно использую этот код для отправки HTTP
запросов с некоторыми параметрами через GET
метод
void sendRequest(String request)
{
// i.e.: request = "http://example.com/index.php?param1=a¶m2=b¶m3=c";
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "text/plain");
connection.setRequestProperty("charset", "utf-8");
connection.connect();
}
Теперь мне может понадобиться отправить параметры (то есть param1, param2, param3) через POST
метод, потому что они очень длинные. Я думал добавить дополнительный параметр к этому методу (например, String httpMethod).
Как я могу изменить приведенный выше код как можно меньше, чтобы иметь возможность отправлять параметры через GET
или POST
?
Я надеялся, что изменение
connection.setRequestMethod("GET");
в
connection.setRequestMethod("POST");
сделал бы трюк, но параметры по-прежнему отправляются через метод GET.
Есть HttpURLConnection
какой-нибудь метод, который поможет? Есть ли полезная конструкция Java?
Любая помощь будет очень высоко ценится.
http://example.com/index.php
)Ответы:
В запросе GET параметры отправляются как часть URL.
В запросе POST параметры отправляются как тело запроса после заголовков.
Чтобы выполнить POST с HttpURLConnection, вам нужно записать параметры в соединение после того, как вы открыли соединение.
Этот код должен помочь вам начать:
источник
byte[] data = urlParameters.getBytes(Charset.forName("UTF-8"))
:).conn.getResponseCode()
илиconn.getInputStream()
иначе он не будет посылать данные.Вот простой пример, который отправляет форму, а затем выгружает страницу результатов в
System.out
. Измените URL и параметры POST соответствующим образом, конечно:Если вы хотите, чтобы результат был
String
напечатан вместо прямой распечатки:источник
UTF-8
это не всегда так. Чтобы получить кодировку, нужно получить заголовокContent-Type
и проанализировать кодировку этого. Когда этот заголовок не доступен, используйте стандартный HTTP один:ISO-8859-1
.<meta charset="...">
или<meta http-equiv="Content-Type" content="...">
заголовок или внутри документа, который необходимо проанализировать.response += line;
феноменально медленный, и он ест разрывы строк. Я добавил к ответу пример получения строкового ответа.Я не смог заставить пример Алана сделать пост, поэтому я закончил с этим:
источник
Я нахожу
HttpURLConnection
действительно громоздким в использовании. И вы должны написать много шаблонного кода, подверженного ошибкам. Мне нужна была легкая обертка для моих проектов Android, и я выпустил библиотеку, которую вы также можете использовать: DavidWebb .Приведенный выше пример можно записать так:
Вы можете найти список альтернативных библиотек по предоставленной ссылке.
источник
Я прочитал ответы выше и создал служебный класс для упрощения HTTP-запроса. Я надеюсь, что это поможет вам.
Вызов метода
Сервисный класс
источник
Я вижу, что другие ответы дали альтернативу, я лично думаю, что интуитивно вы делаете правильные вещи;). Извините, на devoxx, где несколько спикеров разглагольствовали об этом.
Вот почему я лично использую библиотеки Apache HTTPClient / HttpCore для этой работы, и я считаю, что их API проще в использовании, чем встроенная поддержка Java в HTTP. YMMV конечно!
источник
источник
import java.net.*;
!Я была такая же проблема. Я хотел отправить данные через POST. Я использовал следующий код:
Я использовал Jsoup для разбора:
источник
Метод GET и POST установлен следующим образом ... Два типа для вызова API 1) get () и 2) post (). Метод get () для получения значения из массива api json для получения метода value & post () в нашем посте данных в URL и получения ответа.
источник
Попробуйте этот шаблон:
источник
Этот ответ охватывает конкретный случай вызова POST с использованием пользовательского Java POJO.
Использование зависимости maven для Gson для сериализации нашего Java-объекта в JSON.
Установите Gson, используя зависимость ниже.
Для тех, кто использует gradle, можете использовать ниже
Другой используемый импорт:
Теперь мы можем пойти дальше и использовать HttpPost, предоставленный Apache.
Приведенный выше код вернется с кодом ответа, полученным от POST Call
источник
здесь я отправил jsonobject в качестве параметра // jsonobject = {"name": "lucifer", "pass": "abc"} // serverUrl = " http://192.168.100.12/testing " //host=192.168.100.12
источник
Я настоятельно рекомендую http-запрос, основанный на apache http api.
Для вашего случая вы можете увидеть пример:
Если вы не заинтересованы в теле ответа
Для обычной отправки пост-запроса с http-запросом : прочитайте документацию и посмотрите мои ответы HTTP POST-запрос со строкой JSON в JAVA , Отправка HTTP-запроса POST в Java , HTTP POST с использованием JSON в Java
источник
Здравствуйте, пожалуйста, используйте этот класс, чтобы улучшить ваш метод сообщения
источник
Я взял ответ Боанна и использовал его для создания более гибкого построителя строк запросов, который поддерживает списки и массивы, как и метод php http_build_query:
источник
Для тех, кто испытывает затруднения при получении запроса на php-странице, используя $ _POST, потому что вы ожидаете пары ключ-значение:
Хотя все ответы были очень полезны, мне не хватало базового понимания, какую строку на самом деле отправлять, поскольку в старом apache HttpClient я использовал
а затем может использовать $ _POST в php и получить пары ключ-значение.
Насколько я понимаю, теперь нужно создать эту строку вручную перед публикацией. Так что строка должна выглядеть
но вместо этого просто добавив его в URL, который он опубликовал (в шапке).
Альтернативой было бы использовать вместо этого строку json:
и потяните его в php без $ _POST:
Здесь вы найдете пример кода в Котлине:
источник
Похоже, что вы также должны позвонить
connection.getOutputStream()
«хотя бы один раз» (так же, какsetDoOutput(true)
), чтобы он рассматривал его как POST.Итак, минимально необходимый код:
Вы даже можете использовать параметры стиля «GET» в строке urlString, что удивительно. Хотя это может сбить с толку.
Вы также можете использовать NameValuePair, очевидно.
источник