我刚刚开始使用Apache的HTTP客户端库,并注意到没有内置的方法将HTTP响应作为String获取。我只是想把它作为String,以便我可以将它传递给我正在使用的任何解析库。
将HTTP响应作为字符串获取的推荐方法是什么?这是我提出请求的代码:
public String doGet(String strUrl, List<NameValuePair> lstParams) {
String strResponse = null;
try {
HttpGet htpGet = new HttpGet(strUrl);
htpGet.setEntity(new UrlEncodedFormEntity(lstParams));
DefaultHttpClient dhcClient = new DefaultHttpClient();
PersistentCookieStore pscStore = new PersistentCookieStore(this);
dhcClient.setCookieStore(pscStore);
HttpResponse resResponse = dhcClient.execute(htpGet);
//strResponse = getResponse(resResponse);
} catch (ClientProtocolException e) {
throw e;
} catch (IOException e) {
throw e;
}
return strResponse;
}
答案 0 :(得分:45)
您可以使用EntityUtils#toString()
。
// ...
HttpResponse response = client.execute(get);
String responseAsString = EntityUtils.toString(response.getEntity());
// ...
答案 1 :(得分:5)
您需要使用响应正文并获得响应:
BufferedReader br = new BufferedReader(new InputStreamReader(httpresponse.getEntity().getContent()));
然后阅读:
String readLine;
String responseBody = "";
while (((readLine = br.readLine()) != null)) {
responseBody += "\n" + readLine;
}
responseBody现在将您的回复包含在字符串中。
(不要忘记最后关闭BufferedReader:br.close()
)
答案 2 :(得分:1)
您可以执行以下操作:
Reader in = new BufferedReader(
new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
使用阅读器,您将能够构建您的字符串。但是如果您使用的是SAX,则可以直接将流提供给解析器。这样您就不必创建字符串,内存占用也会降低。
答案 3 :(得分:0)
就代码的简洁性而言,它可能正在使用Fluent API,如下所示:
import org.apache.http.client.fluent.Request;
[...]
String result = Request.Get(uri).execute().returnContent().asString();
文档警告说,这种方法在内存消耗方面并不理想。