HttpClient中的连接重置错误

问题描述 投票:0回答:2

这是我正在测试的方案。步骤如下

  1. 创建HttpClient(org.apache.commons.httpclient.HttpClient)3.1的实例
  2. 使用实例从URL(http://www.example.com/submitData)获取响应
  3. 关闭托管步骤2中提到的URL的服务器。
  4. 显示网址
  5. 等待URL进入
  6. 使用在步骤1中创建的HttpClient实例从URL(http://www.example.com/getData)获取响应

我收到错误-连接重置。谁能帮我理解。

我在HttpClient中使用了以下参数

    httpClient.getParams().setParameter("http.socket.timeout", new Integer(0));
    httpClient.getParams().setParameter("http.connection.stalecheck", new Boolean(true));

根据Peter的评论编辑这就是我创建HttpClient的方式

HttpClient httpClient = new HttpClient();
AuthScope authScope = new AuthScope("www.example.com", 80, AuthScope.ANY_REALM);
Credentials defaultcreds = new UsernamePasswordCredentials("username", "pwd");
httpClient.getState().setCredentials(authScope, defaultcreds);
httpClient.getParams().setParameter("http.socket.timeout", new Integer(0));
httpClient.getParams().setParameter("http.connection.stalecheck", new Boolean(true));

建立连接,我使用以下内容

GetMethod getMethod = new GetMethod("http://"+httpClient.getHostConfiguration().getHost()+"/getData");
int statusCode = httpClient.executeMethod(getMethod);

我希望httpclient实例保留主机名,端口和凭据。

这是我得到的确切执行消息-“连接重置”。

更多信息-我正在从Eclipse执行测试。如果以调试模式运行测试用例,则不会出现此异常。

java httpclient connection-reset
2个回答
1
投票
我认为这种行为是合理的,因为当服务器关闭时,服务器上的客户端套接字也会消失。客户端仍然保留旧的套接字,但是此套接字在服务器上已消失。您应该从客户端重新连接。

[AFAIK stale参数允许客户端以干净的方式关闭连接(无异常),但不能防止断开连接。


0
投票
这看起来可疑

httpClient.getParams()。setParameter(“ http.socket.timeout”,新的Integer(0));

将超时设置为0ms可能会过早终止请求?

© www.soinside.com 2019 - 2024. All rights reserved.