Я знаю, что раньше был способ получить его с помощью Apache Commons, как описано здесь: http://hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html и пример здесь:
http://www.kodejava.org/examples/416.html
но я считаю, что это не рекомендуется. Есть ли другой способ сделать http get запрос в Java и получить тело ответа в виде строки, а не потока?
java
apache-httpclient-4.x
apache-commons
Danish94
источник
источник
Ответы:
Каждая библиотека, о которой я могу думать, возвращает поток. Вы можете использовать
IOUtils.toString()
из Apache Commons IO для чтенияInputStream
вString
вызов метода in. Например:Обновление: я изменил приведенный выше пример, чтобы использовать кодировку содержимого из ответа, если он доступен. В противном случае по умолчанию будет использоваться UTF-8, а не локальная система по умолчанию.
источник
Content-Encoding
заголовок из ответа, если он доступен.Вот два примера из моего рабочего проекта.
Использование
EntityUtils
иHttpEntity
С помощью
BasicResponseHandler
источник
response.getEntity()
и теперь он доступен какresponseString
. если вы попытаетесь сделать response.getEntity () снова, он вернетсяIllegalStateException
.Вот пример из другого простого проекта, над которым я работал, используя библиотеку httpclient от Apache:
просто используйте EntityUtils, чтобы получить тело ответа в виде строки. очень просто.
источник
Это относительно просто в конкретном случае, но довольно сложно в общем случае.
Ответ зависит от
Content-Type
заголовка ответа HTTP .Этот заголовок содержит информацию о полезной нагрузке и может определять кодировку текстовых данных. Даже если вы принимаете текстовые типы , вам может потребоваться проверить сам контент, чтобы определить правильную кодировку символов. Например, смотрите спецификацию HTML 4 для получения подробной информации о том, как сделать это для этого конкретного формата.
Как только кодировка известна, InputStreamReader может использоваться для декодирования данных.
Этот ответ зависит от того, что сервер делает правильно: если вы хотите обрабатывать случаи, когда заголовки ответа не соответствуют документу, или объявления документа не соответствуют используемой кодировке, это еще один пример.
источник
Ниже приведен простой способ доступа к ответу в виде строки с помощью клиентской библиотеки Apache HTTP.
источник
Как насчет этого?
источник
Ответ Макдауэлла правильный. Однако, если вы попробуете другое предложение в нескольких постах выше.
Тогда это даст вам нелегальное состояние StateExtate о том, что контент уже используется.
источник
Мы можем использовать приведенный ниже код также, чтобы получить ответ HTML в Java
источник
Вот легкий способ сделать это:
Конечно,
responseString
содержит ответ веб-сайта и тип ответаHttpResponse
, возвращаемыйHttpClient.execute(request)
источник
Ниже приведен фрагмент кода, который показывает лучший способ обработки тела ответа в виде строки, будь то действительный ответ или ответ об ошибке для запроса HTTP POST:
источник
Вы можете использовать стороннюю библиотеку, которая отправляет запрос Http и обрабатывает ответ. Одним из известных продуктов будет Apache commons HTTPClient: HttpClient javadoc , HttpClient Maven . Существует гораздо менее известный, но гораздо более простой HTTPClient (часть написанной мной библиотеки MgntUtils с открытым исходным кодом): MgntUtils HttpClient javadoc , артефакт MgntUtils maven , MgntUtils Github . Используя любую из этих библиотек, вы можете отправлять свой запрос REST и получать ответ независимо от Spring как часть вашей бизнес-логики.
источник
Если вы используете Джексона для десериализации тела ответа, одним из очень простых решений является использование
request.getResponseBodyAsStream()
вместоrequest.getResponseBodyAsString()
источник