Me sigo encontrando con esta situación en la que recibo una mala respuesta HTTP (como un 400) pero no puedo ver la HttpEntity en el objeto HttpResponse. Cuando paso con el depurador, puedo ver que la entidad tiene contenido (longitud> 0) e incluso puedo mirar el contenido, pero todo lo que veo es una matriz de números (¿supongo que los códigos ASCII?) Que no es servicial. Llamaré a EntityUtils.toString() en la entidad, pero recibo una excepción, ya sea una excepción IOException, o algún tipo de "objeto está en un estado inválido". ¡Esto es realmente frustrante! ¿Hay alguna forma de llegar a este contenido en una forma legible por humanos?¿Hay alguna forma de obtener el valor String de una HttpEntity cuando EntityUtils.toString() devuelve una excepción?
Aquí está mi código:
protected JSONObject makeRequest(HttpRequestBase request) throws ClientProtocolException, IOException, JSONException, WebRequestBadStatusException {
HttpClient httpclient = new DefaultHttpClient();
try {
request.addHeader("Content-Type", "application/json");
request.addHeader("Authorization", "OAuth " + accessToken);
request.addHeader("X-PrettyPrint", "1");
HttpResponse response = httpclient.execute(request);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode < 200 || statusCode >= 300) {
throw new WebRequestBadStatusException(statusCode);
}
HttpEntity entity = response.getEntity();
if (entity != null) {
return new JSONObject(EntityUtils.toString(entity));
} else {
return null;
}
} finally {
httpclient.getConnectionManager().shutdown();
}
}
ver donde iniciar la excepción? Lo que me gustaría hacer es absorber el contenido de HttpEntity y ponerlo en la excepción.
Si stringizing falla, siempre se puede conseguir con los bytes sin formato 'EntityUtils.toByteArray()' y producir un volcado hexadecimal de esos bytes usted mismo. –
Sí, pensé en eso. ¿Conoce las utilidades que tomarán el tipo de salida [100, 21, 45, 22] que obtenemos del depurador y convertirlo en algo legible para los humanos? – sangfroid
Pruebe el constructor de cadenas: http://download.oracle.com/javase/1,5.0/docs/api/java/lang/String.html#String (byte [], java.lang.String) –