0

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

  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));

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

4

2 回答 2

2

我认为这种行为是合理的,因为当服务器关闭时,服务器上的客户端套接字也会消失。客户端仍然拥有旧的套接字,但这个套接字在服务器上已经消失了。您应该从客户端重新连接。

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

于 2014-03-27T08:35:29.050 回答
-1

这看起来很可疑

httpClient.getParams().setParameter("http.socket.timeout", new Integer(0));

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

于 2020-06-05T15:06:12.927 回答