【发布时间】:2020-08-27 20:19:23
【问题描述】:
在版本 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,但这些都不允许您设置连接超时。试图找到两全其美的选择,但这里的选项似乎有点混乱。
【问题讨论】:
-
我不明白。您是在询问响应正文(您可以使用
getEntity获得,如链接示例中所示)还是在询问超时(您可以在HttpGet和/或HttpClient中看到)? -
文章建议使用 getEntity() 的方式似乎与我设置超时的方式不兼容。我不知道它可以在http客户端设置。但是我看到您可以在 SimpleHttpRequest 的配置中设置超时,所以我认为这是正确的方法。不知道还有没有其他关于hc5的好文章,我看了一篇还不清楚