如何获取 Apache HttpClient5 的 HttpResponse 的响应体?

How to acquire the response body from Apache HttpClient5's HttpResponse?

在版本 4 中获取状态代码和响应正文如此简单:

StringEntity entity = new StringEntity(jsonData.toString());
HttpResponse r = org.apache.http.client.fluent.Request.Post(uri)
        .connectTimeout(10*1000)
        .socketTimeout(10*1000)
        .addHeader("Content-Type", "application/json; charset=utf-8")
        .body(entity)
        .execute()
        .returnResponse();
int status = r.getStatusLine().getStatusCode();
String body = EntityUtils.toString(r.getEntity(), "UTF-8");
return new CoolResponse(status, body);

但现在在 httpclient5 中,出于某种原因,无法从 HttpResponse 中获取与响应主体相关的任何内容。对此非常困惑。如果我在他们的快速入门 (https://hc.apache.org/httpcomponents-client-5.0.x/quickstart.html) 中遵循示例 3,它建议我创建一个 CloseableHttpClient、一个 HttpGet 和一个 CloseableHttpResponse,但是其中的 none 允许您设置连接超时。试图找到两全其美的方法,但这里的选择似乎有些混乱。

快速入门中没有提及,但在流畅的 API 中,您可以使用 handleResponse() 跟进 execute() 并传递一个 lambda。

我最终在此处找到了比快速入门更好的文章: https://ok2c.github.io/httpclient-migration-guide/migration-to-classic.html