HttpClient中的连接重置错误

时间:2014-03-27 07:38:27

标签: java httpclient connection-reset

这是我正在测试的场景。步骤如下

  1. 创建HttpClient实例(org.apache.commons.httpclient.HttpClient)3.1
  2. 使用该实例从网址(http://www.example.com/submitData
  3. 获取回复
  4. 关闭托管第2步中提到的网址的服务器。
  5. 打开网址
  6. 等到网址结束
  7. 使用步骤1中创建的HttpClient实例从网址(http://www.example.com/getData)获取响应
  8. 我收到错误 - 连接重置。 任何人都可以帮助我理解。

    我在HttpClient中使用了以下参数

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

    彼得的评论后编辑 这就是我创建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执行测试。如果我在调试模式下运行测试用例,我就不会得到这个例外。

2 个答案:

答案 0 :(得分:1)

我认为这种行为是合理的,因为当服务器出现故障时,服务器上的客户端套接字也会消失。客户端仍然保留旧套接字,但此套接字已在服务器上消失。您应该从客户端重新连接。

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

答案 1 :(得分:0)

这看起来可疑

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

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