17

我刚刚开始使用 Apache 的 HTTP 客户端库,并注意到没有将 HTTP 响应作为字符串获取的内置方法。我只是想把它作为字符串来获取,这样我就可以将它传递给我正在使用的任何解析库。

将 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;

}
4

4 回答 4

49

你可以用EntityUtils#toString()这个。

// ...
HttpResponse response = client.execute(get);
String responseAsString = EntityUtils.toString(response.getEntity());
// ...
于 2012-08-23T20:04:23.297 回答
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():)

于 2012-08-23T20:08:13.983 回答
1

您可以执行以下操作:

Reader in = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent(), "UTF-8"));

使用阅读器,您将能够构建您的字符串。但是如果您使用的是 SAX,您可以直接将流提供给解析器。这样您就不必创建字符串,并且您的内存占用也会更低。

于 2012-08-23T20:08:55.893 回答
0

就代码的简洁性而言,它可能使用这样的Fluent API

import org.apache.http.client.fluent.Request;
[...]
String result = Request.Get(uri).execute().returnContent().asString();

尽管文档警告说,这种方法在内存消耗方面并不理想。

于 2017-07-25T20:47:53.393 回答