如何获取 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
在版本 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