Continuo a correre in questa situazione in cui ottengo una risposta HTTP non valida (come una 400) ma non riesco a guardare l'HttpEntity nell'oggetto HttpResponse. Quando passo con il debugger, posso vedere che l'entità ha contenuto (lunghezza> 0) e posso anche guardare il contenuto, ma tutto quello che vedo è una serie di numeri (codici ASCII credo?) Che non è utile. Chiamerò EntityUtils.toString() sull'entità, ma restituisco un'eccezione - un'eccezione IOException o qualche tipo di "oggetto è in uno stato non valido". Questo è davvero frustrante! C'è un modo per ottenere questo contenuto in una forma leggibile?Esiste un modo per ottenere il valore String di un HttpEntity quando EntityUtils.toString() restituisce un'eccezione?
Ecco il mio codice:
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();
}
}
Vedere dove butto l'eccezione? Quello che mi piacerebbe fare è succhiare il contenuto di HttpEntity e metterlo nell'eccezione.
Se stringizing fallisce, si può sempre ottenere i byte prime con 'EntityUtils.toByteArray()' e produrre un dump esadecimale di quei byte da soli. –
Sì, ci ho pensato. Conoscere eventuali utilità che prenderanno il tipo di output [100, 21, 45, 22] che otteniamo dal debugger e trasformarlo in qualcosa di leggibile? – sangfroid
Prova il costruttore String: http://download.oracle.com/javase/1,5.0/docs/api/java/lang/String.html#String (byte [], java.lang.String) –