HttpClient get请求取消自动重定向,并获取重定向的地址。

为了实现这个功能。在网上寻找的获取重定向的方法,出现了两个问题,摸索了半天。

1、获取的返回code为200.原因为,get请求为自动重定向,设置了取消。如下设置取消取消重定向。

                               HttpClient client = new DefaultHttpClient();

HttpParams params = client.getParams();
params.setParameter(ClientPNames.HANDLE_REDIRECTS, false);

2、重定向的地址需要这样获取。

                               HttpEntity entity = response.getEntity();
if(null != entity){
 Header[] headers = response.getHeaders("Location");  
                         if(headers!=null && headers.length>0){  
                              String redirectUrl = headers[0].getValue();  
                              Log.e("","124578-定向的URL重:" + redirectUrl);
                          }

                                       }

3、这个是获取请求的url。(HttpUriRequest request =  (HttpUriRequest) context.getAttribute(ExecutionContext.HTTP_REQUEST);)

      而不是重定向的地址。重定向地址在2中,说明。

请求的实例。已验证,可以正常获取。

                                HttpClient client = new DefaultHttpClient();

HttpParams params = client.getParams();
params.setParameter(ClientPNames.HANDLE_REDIRECTS, false);
HttpContext context = new BasicHttpContext();
HttpGet get = new HttpGet(url);
try {
HttpResponse response = client.execute(get,context);
HttpHost host = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
HttpUriRequest request =  (HttpUriRequest) context.getAttribute(ExecutionContext.HTTP_REQUEST);
int code = response.getStatusLine().getStatusCode();
Log.e("","--124578----host:"+host+",request:"+request.getRequestLine()+",rul:"+request.getURI()+ ",code"+code);
HttpEntity entity = response.getEntity();
if(null != entity){
Header[] headers = response.getHeaders("Location");  
               if(headers!=null && headers.length>0){  
                   String redirectUrl = headers[0].getValue();  
                   Log.e("","124578-定向的URL重:" + redirectUrl);
               }
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RestTemplate是Spring框架提供的一个用于发送HTTP请求的工具类。在使用RestTemplate发送GET请求时,默认会自动处理重定向,并返回最终的响应结果。然而,有时我们需要获取重定向后的地址,而不是最终的响应结果。 解决这个问题的方法有两种: 方法1:使用自定义的HttpComponentsClientHttpRequestFactory来取消自动重定向。首先创建一个RestTemplate实例,然后创建一个HttpComponentsClientHttpRequestFactory实例,并设置一个自定义的HttpClient,该HttpClient使用LaxRedirectStrategy来处理重定向。最后将HttpComponentsClientHttpRequestFactory设置为RestTemplate的请求工厂。 方法2:在重定向之前,从响应的header中获取真实的地址Location,并将其存储在HttpContext中。在第二次调用时,从HttpContext中获取真实地址,并将其设置到请求的header中,这样就能在最终的返回结果中获取重定向后的地址。 根据你提供的引用内容,你可以选择其中一种方法来解决获取重定向地址的问题。 #### 引用[.reference_title] - *1* [Spring的RestTemplate访问重定向地址获取30*原始返回数据,而不是继续重定向](https://blog.csdn.net/yangyangye/article/details/127282700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Spring的RestTemplate自动重定向,如何拿到重定向后的地址?](https://blog.csdn.net/m0_37657841/article/details/107391699)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值