2011-08-30 337 views
2

我使用Apache httpdefault客户端并执行交函数如下apache的客户端的HTTP响应处理状态码HTTP 100

HttpResponse imToken = httpClient.execute(httpPostIM); 

得到的响应是

HTTP/1.1 100 Continue 
Connection: keep-alive 

后跟:

HTTP/1.1 200 OK 
Date: Tue, 30 Aug 2011 19:11:35 GMT 

我们如何处理这从客户端?

+0

我可以检查100个状态码。但我如何等待并得到第二个响应。是否有任何代码片段。我在apache文档中看到了这一点,但不知道如何实现为了处理这个问题,一个简单的HTTP 1.1客户端可能会从套接字读取一个响应;如果状态码是100,则丢弃第一个响应并改为读取下一个响应。 – Kavitha

回答

3

下面是response 100 from w3的定义,这里有一个很好的what the response looks like示例。引用:

客户端应该继续其请求。此临时响应用于通知客户端请求的初始部分已收到并且尚未被服务器拒绝。客户端应该继续发送请求的其余部分,或者如果请求已经完成,则忽略此响应。请求完成后,服务器必须发送最终响应。有关使用和处理此状态码的详细讨论,请参见第8.2.3节。

所以,如果您的客户端已经发送了整个请求,那么它应该只是等待服务器,直到它给出了一个200或其他“最终”的回应。

根据Apache的HttpClient代码,你没有做任何事情,因为客户端忽略所有1XX响应代码,并继续寻找一个最终的响应。这是从commons-httpclient-3.1在类HttpMethodBase

if ((status >= 100) && (status < 200)) { 
    if (LOG.isInfoEnabled()) { 
     LOG.info("Discarding unexpected response: " + 
      this.statusLine.toString()); 
    } 
    this.statusLine = null; 
} 

如果您没有看到这种行为,那么也许你需要增加你的客户机超时?也许它没有足够长的等待时间?