HttpClient 4 - how to capture last redirect URL

后端 未结 8 1941
北恋
北恋 2020-11-29 18:53

I have rather simple HttpClient 4 code that calls HttpGet to get HTML output. The HTML returns with scripts and image locations all set to local (e.g.

8条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-29 19:11

    I think easier way to find last URL is to use DefaultRedirectHandler.

    package ru.test.test;
    
    import java.net.URI;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.ProtocolException;
    import org.apache.http.impl.client.DefaultRedirectHandler;
    import org.apache.http.protocol.HttpContext;
    
    public class MyRedirectHandler extends DefaultRedirectHandler {
    
        public URI lastRedirectedUri;
    
        @Override
        public boolean isRedirectRequested(HttpResponse response, HttpContext context) {
    
            return super.isRedirectRequested(response, context);
        }
    
        @Override
        public URI getLocationURI(HttpResponse response, HttpContext context)
                throws ProtocolException {
    
            lastRedirectedUri = super.getLocationURI(response, context);
    
            return lastRedirectedUri;
        }
    
    }
    

    Code to use this handler:

      DefaultHttpClient httpclient = new DefaultHttpClient();
      MyRedirectHandler handler = new MyRedirectHandler();
      httpclient.setRedirectHandler(handler);
    
      HttpGet get = new HttpGet(url);
    
      HttpResponse response = httpclient.execute(get);
    
      HttpEntity entity = response.getEntity();
      lastUrl = url;
      if(handler.lastRedirectedUri != null){
          lastUrl = handler.lastRedirectedUri.toString();
      }
    

提交回复
热议问题