Sé que solía haber una manera de obtenerlo con apache commons como se documenta aquí: http://hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html y un ejemplo aquí:
http://www.kodejava.org/examples/416.html
Pero creo que esto está en desuso. ¿Hay alguna otra forma de hacer una solicitud de obtención de http en java y obtener el cuerpo de respuesta como una cadena y no como una secuencia?
Respuestas:
Cada biblioteca que se me ocurre devuelve una secuencia. Se podría utilizar
IOUtils.toString()
de Apache Commons IO para leer unaInputStream
en unaString
en una llamada al método. P.ej:Actualización: cambié el ejemplo anterior para usar la codificación de contenido de la respuesta si está disponible. De lo contrario, su valor predeterminado será UTF-8 como una mejor suposición, en lugar de usar el valor predeterminado del sistema local.
fuente
Content-Encoding
encabezado de la respuesta si está disponible.Aquí hay dos ejemplos de mi proyecto de trabajo.
Usando
EntityUtils
yHttpEntity
Utilizando
BasicResponseHandler
fuente
response.getEntity()
y ahora está disponible comoresponseString
. Si intenta hacer una respuesta.getEntity () nuevamente, volveráIllegalStateException
.Aquí hay un ejemplo de otro proyecto simple en el que estaba trabajando usando la biblioteca httpclient de Apache:
solo use EntityUtils para tomar el cuerpo de la respuesta como una Cadena. muy simple.
fuente
Esto es relativamente simple en el caso específico, pero bastante complicado en el caso general.
La respuesta depende del
Content-Type
encabezado de respuesta HTTP .Este encabezado contiene información sobre la carga útil y puede definir la codificación de datos textuales. Incluso si asume tipos de texto , es posible que deba inspeccionar el contenido en sí mismo para determinar la codificación de caracteres correcta. Por ejemplo, consulte la especificación HTML 4 para obtener detalles sobre cómo hacer eso para ese formato en particular.
Una vez que se conoce la codificación, se puede usar un InputStreamReader para decodificar los datos.
Esta respuesta depende de que el servidor haga lo correcto: si desea manejar casos en los que los encabezados de respuesta no coinciden con el documento, o las declaraciones del documento no coinciden con la codificación utilizada, esa es otra fuente de información.
fuente
A continuación se muestra una forma sencilla de acceder a la respuesta como una cadena utilizando la biblioteca del cliente HTTP Apache.
fuente
¿Qué tal solo esto?
fuente
La respuesta de McDowell es correcta. Sin embargo, si intentas otra sugerencia en algunas de las publicaciones anteriores.
Entonces le dará ilegalStateException indicando que el contenido ya está consumido.
fuente
Podemos usar el siguiente código también para obtener la respuesta HTML en Java
fuente
Aquí hay una forma ligera de hacerlo:
Por supuesto,
responseString
con la respuesta del sitio web y la respuesta del tipo de respuestaHttpResponse
, devuelta porHttpClient.execute(request)
fuente
El siguiente es el fragmento de código que muestra una mejor manera de manejar el cuerpo de la respuesta como una Cadena, ya sea una respuesta válida o una respuesta de error para la solicitud HTTP POST:
fuente
Puede usar una biblioteca de fiestas en 3-d que envía una solicitud Http y maneja la respuesta. Uno de los productos conocidos sería HTTPClient de Apache commons: HttpClient javadoc , artefacto HttpClient Maven . Existe un HTTPClient mucho menos conocido pero mucho más simple (parte de una biblioteca de MgntUtils de código abierto escrita por mí): MgntUtils HttpClient javadoc , artefacto de MgntUtils maven , MgntUtils Github . Con cualquiera de esas bibliotecas, puede enviar su solicitud REST y recibir una respuesta independiente de Spring como parte de su lógica empresarial
fuente
Si está utilizando Jackson para deserializar el cuerpo de respuesta, una solución muy simple es usar en
request.getResponseBodyAsStream()
lugar derequest.getResponseBodyAsString()
fuente