`
gzcj
  • 浏览: 286227 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

httpclient 使用小记

阅读更多

最近学习apache的httpclient

在使用postmethod时,当使用httpclient执行executeMethod(POSTMETHOD)

时发现,该方法会调用

HttpMethodBase.execute(HttpState, HttpConnection)

该方法又会调用
HttpMethodBase.writeRequest(HttpState, HttpConnection)

而HttpMethodBase.writeRequest又会调用

HttpMethodBase.writeRequestHeaders(HttpState, HttpConnection)

在这里会添加一些头字段。

 

HttpMethodBase.writeRequestHeaders会调用EntityEnclosingMethod.addRequestHeaders(HttpState, HttpConnection)

EntityEnclosingMethod.addRequestHeaders会调用

ExpectContinueMethod.addRequestHeaders(HttpState, HttpConnection)

ExpectContinueMethod.addRequestHeaders会调用

HttpMethodBase.addRequestHeaders(HttpState, HttpConnection)

在这里会调用

  addUserAgentRequestHeader(state, conn);
        addHostRequestHeader(state, conn);
        addCookieRequestHeader(state, conn);
        addProxyConnectionHeader(state, conn);

在EntityEnclosingMethod.addRequestHeaders里会调用

addContentLengthRequestHeader(state, conn);

如果在请求头中没有content-length和Transfer-Encoding

则会在头中加入Content-Length

在设置完Content-Length后,会检验头Content-Type

super.addRequestHeaders(state, conn);
        addContentLengthRequestHeader(state, conn);

        // only use the content type of the request entity if it has not already been
        // set manually
        if (getRequestHeader("Content-Type") == null) {
            RequestEntity requestEntity = getRequestEntity();
            if (requestEntity != null && requestEntity.getContentType() != null) {
                setRequestHeader("Content-Type", requestEntity.getContentType());
            }
        }

 在执行完这些后

会在头中加入

User-Agent: Host:  Content-Length:

这样如果手动设置请求头中的Content-Length,则httpclient就不会自己设置了。这样如果请求体的长度与Content-Length不相符的时候,在使用weblogic作为web容器的时候,就会有问题。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics