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

    xiaoxiao2021-03-25  150

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

    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(); }
    转载请注明原文地址: https://ju.6miu.com/read-2388.html

    最新回复(0)