【问题标题】:apache client http response to handle status code http 100apache客户端http响应处理状态码http 100
【发布时间】:2018-11-05 13:11:59
【问题描述】:

我使用 apache httpdefault 客户端并执行 post 功能如下

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

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

【问题讨论】:

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

标签: java httpclient


【解决方案1】:

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

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

因此,如果您的客户端已经发送了整个请求,那么它应该等待服务器结束,直到它给出 200 或其他“最终”响应。

根据 Apache HttpClient 代码,您无需执行任何操作,因为客户端会忽略所有 1XX 响应代码并继续寻找最终响应。这是来自HttpMethodBase班级中的commons-httpclient-3.1

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

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

【讨论】:

    猜你喜欢
    • 2011-04-22
    • 1970-01-01
    • 2013-01-13
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多