当前位置: 首页 > 知识库问答 >
问题:

在使用Apache的HTTP客户端时,建议使用什么方法将HTTP响应作为字符串获取?[副本]

夏青青
2023-03-14

我刚刚开始使用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;

}

共有3个答案

田慈
2023-03-14

你可以这样做:

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

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

申高峰
2023-03-14

您需要使用响应体并获得响应:

BufferedReader br = new BufferedReader(new InputStreamReader(httpresponse.getEntity().getContent()));

然后读它:

String readLine;
String responseBody = "";
while (((readLine = br.readLine()) != null)) {
  responseBody += "\n" + readLine;
}

响应体现在以字符串形式包含您的响应。

(最后不要忘记关闭BufferedReader:br.close()

夹谷沛
2023-03-14

您可以为此使用EntityUtils#toString()。

// ...
HttpResponse response = client.execute(get);
String responseAsString = EntityUtils.toString(response.getEntity());
// ...
 类似资料:
  • 问题内容: 我刚刚开始使用Apache的HTTP客户端库,并注意到没有将HTTP响应作为字符串获取的内置方法。我只是想以String的形式获取它,以便将其传递给我正在使用的任何解析库。 建议将HTTP响应作为字符串获取的推荐方式是什么?这是我发出请求的代码: 问题答案: 您可以为此使用。

  • 在对我们的Swing应用程序进行审计后,我们的用户的某些密码似乎在他们登录甚至退出后很长时间仍保留在内存中。 原因之一似乎是Apache HttpClient的< code > UsernamePasswordCredentials 将密码存储为< code >最终字符串,防止以编程方式将其从内存中擦除(参见为什么char[]比String更适合用作密码?). 但是,由于它实现的< code>Cr

  • 问题内容: 我知道曾经有一种使用apache commons来获取它的方法,如此处记录的:http : //hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html 和此处的示例: http://www.kodejava.org/examples/416.html 但我认为这已被弃用。

  • 我在这里使用Reactor Netty HTTP客户端作为独立的依赖项,即不是通过,因为我不想拖入与spring相关的依赖项 从文档中可以看出,可以发出返回的请求 问题是只包含头和staus。从这里的Java文件可以看出 从示例中也可以使用您可以做的数据 但这仅将http实体数据作为字符串返回。没有有关标头或状态代码的信息。 我现在遇到的问题是,我需要发出一个请求,并得到一个响应,该响应既给我报头

  • 我正在使用Apache HTTP客户端联系外部服务。这项服务可能需要几个小时(如果不是更长的话)才能产生响应。我尝试了一些不同的方法,但要么以套接字结束,要么以读取超时结束。我刚刚尝试使用RequestConfig将套接字和连接超时设置为0,根据文档,这应该是无限的,但请求总是在1小时后返回。有什么想法吗?

  • 由于我需要使用一些旧服务器,并且由于已从Java8中删除,因此我需要重新启用一些基于RC4的密码。如发行说明中所述,我们必须使用。由于我使用的是Apache HTTP客户端,因此无法找到执行此操作的方法。提前感谢!(我还发现了相当多的半挂车问题,但没有答案,所以想发布一个新的)