我正在编写一个可以在网站上登录和购物的Java应用程序。当我尝试执行第二个HttpResponse / Post时,我遇到了HttpClient挂起的问题。它之前工作正常,不知道为什么它开始挂起。我没有收到任何错误,只是坐在那里而陷入困境。我做出的唯一一个可能导致这种挂断的变化是我使用HttpGet来检索令牌,这样我就可以登录网站了。
这是我如何设置httpClient
private static BasicCookieStore cookieStore = new BasicCookieStore();
private static HttpClient httpClient = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build();
其余的只是一个标准的httpget& httppost,然后是httpclient.execute();
第一个序列是我的程序查询网站并检索令牌,然后我发送带有令牌的POST以登录。之后我的程序再次查询网站以获取产品信息,然后添加到购物车。但它在第二次POST时挂起。
我可以在某个地方错过同花顺吗?我正在读某个地方,这种HttpClient关闭了。 DefaultHttpClient已被弃用。
答案 0 :(得分:31)
在下面的教程中,他们没有提到我应该使用post.releaseConnection();它导致我的代码挂断,因此我在每次POST / GET后都加入了releaseConnection()函数。我希望这是清理代码的正确方法。
答案 1 :(得分:0)
releaseConnection()
或reset()
将“重置请求的内部状态使其可重用”:
HttpGet request = new HttpGet("https://httpbin.org/get");
try (CloseableHttpClient client = HttpClients.createDefault()) {
CloseableHttpResponse response = client.execute(request)
// do something with response
} finally {
request.releaseConnection()
}
完成响应后,致电response.close()
:
HttpGet request = new HttpGet("https://httpbin.org/get");
try (CloseableHttpClient client = HttpClients.createDefault()) {
try {
CloseableHttpResponse response = client.execute(request)
// do something with response
} finally {
response.close()
}
}
我们可以通过将响应添加到try-with-resources语句中来进行整理:
HttpGet request = new HttpGet("https://httpbin.org/get");
try (CloseableHttpClient client = HttpClients.createDefault();
CloseableHttpResponse response = client.execute(request)) {
// do something with response
}