- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 HttpClient 3..0.1 与 MultiThreadedHttpConnectionManager
结合使用,并使用以下代码来获取页面并获取该页面的最终重定向 URL。
多个线程并行访问此代码。运行此代码一段时间后,我开始连续收到 ConnectionPoolTimeoutException
,然后不再提取任何页面。
这是否与我应该增加的 connectionManagerParam
值有关,或者我在代码中做错了什么?
GetMethod get = null;
try {
get = new GetMethod();
get.setURI(uri);
get.setFollowRedirects(false);
int status = httpClient.executeMethod(null, get, new HttpState());
String location = null;
int retry = 2;
if (get.getResponseHeader("location") != null) {
location = get.getResponseHeader("location").getValue();
}
while (retry > 0 && ((int) (status / 100) != 2) && ((int) (status / 100) == 3) && location.length() > 0) {
// To get the final redirected url.
uri = URLUtil.createAbsoluteURIWithFix(location, null);
get = new GetMethod();
get.setURI(uri);
get.setFollowRedirects(false);
status = httpClient.executeMethod(null, get, new HttpState());
if (get.getResponseHeader("location") != null) {
location = get.getResponseHeader("location").getValue();
}
retry--;
}
if (status == 200) {
uri = get.getURI();
String html = URLUtil.getResponseBodyAsString(get, charsets);
}
} catch (Exception e) {
} finally {
if (get != null) {
get.releaseConnection();
}
}
异常堆栈跟踪
org.apache.commons.httpclient.ConnectionPoolTimeoutException: Timeout waiting for connection
at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:490)
at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:394)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:152)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
我需要在每个执行方法之后调用 get.releaseConnection() 吗?或者当前的编码没问题?
最佳答案
似乎您没有关闭第一个 get 并创建一个影响同一个 var 的新 get 。在循环中做同样的事情。
您应该在此代码中仅保留一个实例,并在全局 try/finally 结束时清理它。
关于java - HttpMethod.releaseConnection() 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11946577/
我将 HttpClient 3..0.1 与 MultiThreadedHttpConnectionManager 结合使用,并使用以下代码来获取页面并获取该页面的最终重定向 URL。 多个线程并行访
我有一个包含 10 个请求的请求列表,这些请求的格式相同,只是一个不同的参数,并且这些请求都发布到相同的 URI。我不太清楚releaseConnection是如何做的,我有如下代码: HttpPos
为什么我需要发布 ClientResponse: response.releaseConnection(); 有优势吗?为什么 RestEasy 不处理这个? 有时我必须释放它,有时我没有 - 这是
我正在使用 HTTPClient 构建一个测试项目来测试 restful 服务。这是我目前成功用于在 GET 上获得 200 OK 响应的代码。但是,我在 .releaseConnection 上收到
CloseableHttpResponse response = null; try { // do some thing .... HttpPost request = new Ht
我遇到了问题:我刚刚将以下代码从 NetBeans 复制到 Eclipse(一个 ADT 项目)。我导入了在 NetBeans 中使用的所有相同库,但在以下几行中出现了 2 个错误: EntityUt
我正在使用 mysql felix node.js 模块。 我正在使用它的池连接。 我的服务器端(用 Node 编写)有很多这样写的查询: this.courtsAmount = function
我是一名优秀的程序员,十分优秀!