我一直遇到這種情況,我得到一個錯誤的HTTP響應(如400),但無法看到HttpResponse對象中的HttpEntity。當我使用調試器時,我可以看到實體具有內容(長度> 0),我甚至可以查看內容,但是我看到的只是一組數字(我猜是ASCII碼),它不是很有幫助。我將在實體上調用EntityUtils.toString(),但是我得到一個異常 - IOException或某種「對象處於無效狀態」異常。這真令人沮喪!有沒有辦法以人類可讀的形式獲取此內容?當EntityUtils.toString()返回異常時,有沒有辦法獲得HttpEntity的字符串值?
這裏是我的代碼:
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();
}
}
看到我拋出異常?我想要做的是吸出HttpEntity的內容並將其放入例外狀態。
如果字符串化失敗,您可以始終使用'EntityUtils.toByteArray()'獲取原始字節,並自己生成這些字節的十六進制轉儲。 –
是的,我想到了。瞭解任何將從調試器獲得[100,21,45,22]類型輸出的實用程序,並將其轉化爲人類可讀的內容? – sangfroid
嘗試使用String構造函數:http://download.oracle.com/javase/1,5.0/docs/api/java/lang/String.html#String(byte [],java.lang.String) –