如何将 HTTP 响应正文作为字符串获取?

我知道曾经有一种方法可以通过Apache Commons获得它,如下所述:

http://hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html

...这里有一个例子:

http://www.kodejava.org/examples/416.html

...但我相信这已被弃用。

有没有其他方法可以在Java中发出http get请求,并将响应正文作为字符串而不是流获取?


答案 1

以下是我的工作项目中的两个例子。

  1. 使用 EntityUtilsHttpEntity

    HttpResponse response = httpClient.execute(new HttpGet(URL));
    HttpEntity entity = response.getEntity();
    String responseString = EntityUtils.toString(entity, "UTF-8");
    System.out.println(responseString);
    
  2. 使用 BasicResponseHandler

    HttpResponse response = httpClient.execute(new HttpGet(URL));
    String responseString = new BasicResponseHandler().handleResponse(response);
    System.out.println(responseString);
    

答案 2

我能想到的每个库都返回一个流。你可以使用 Apache Commons IO 中的 IOUtils.toString() 来读取一个 in one 方法调用。例如:InputStreamString

URL url = new URL("http://www.example.com/");
URLConnection con = url.openConnection();
InputStream in = con.getInputStream();
String encoding = con.getContentEncoding();
encoding = encoding == null ? "UTF-8" : encoding;
String body = IOUtils.toString(in, encoding);
System.out.println(body);

更新:我将上面的示例更改为使用响应中的内容编码(如果可用)。否则,它将默认使用 UTF-8 作为最佳猜测,而不是使用本地系统默认值。


推荐