欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Apache httpclient的execute方法调试 apachewebhttpSAP成都研究院SAP云平台 

程序员文章站 2022-03-12 10:44:19
...

因为工作需要,想研究一下execute执行的逻辑。

在这一行调用execute:

response = getHttpClient().execute(get);

getHttpClient的实现:

private HttpClient getHttpClient() {
        if (this.m_httpClient == null) {
            this.m_httpClient = HttpClientBuilder.create().build();
        }
        return this.m_httpClient;
    }

我在代码里声明的HttpClient只是一个接口,

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

实现类是InternalHttpClient。

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

首先根据传入的请求决定出目标-target host

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

投递到RedirectExec执行。

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

后者又投递到RetryExec执行。

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

收到307重定向:

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

redirectsEnabled标志位为true:

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

再看当前的请求确实被redirect了吗?

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

original url:

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

我的后台服务器返回的307,落到了分支HttpStatus.SC_TEMPORARY_REDIRECT处:

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

看来Apache的库认为只有HEAD和GET才能被redirect:

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

重定向最大次数:50

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

准备重试了:

 
Apache httpclient的execute方法调试
            
    
    
        apachewebhttpSAP成都研究院SAP云平台 

要获取更多Jerry的原创文章,请关注公众号"汪子熙"。