• Java 获取网络重定向URL(302重定向)


    方法1:

     1 import java.net.HttpURLConnection;
     2 import java.net.URL;
     3  
     4 import org.junit.Assert;
     5 import org.junit.Test;
     6  
     7 public class GetRedirectUrlTest {
     8     @Test
     9     public void test_getRedirectUrl() throws Exception {
    10         String url="http://www.baidu.com/link?url=ByBJLpHsj5nXx6DESXbmMjIrU5W4Eh0yg5wCQpe3kCQMlJK_RJBmdEYGm0DDTCoTDGaz7rH80gxjvtvoqJuYxK";
    11         String expectUrl="http://www.zhihu.com/question/20583607/answer/16597802";
    12         String redictURL = getRedirectUrl(url);
    13         Assert.assertEquals(expectUrl, redictURL);
    14     }
    15     
    16     /**
    17      * 获取重定向地址
    18      * @param path
    19      * @return
    20      * @throws Exception
    21      */
    22     private String getRedirectUrl(String path) throws Exception {
    23         HttpURLConnection conn = (HttpURLConnection) new URL(path)
    24                 .openConnection();
    25         conn.setInstanceFollowRedirects(false);
    26         conn.setConnectTimeout(5000);
    27         return conn.getHeaderField("Location");
    28     }
    29 }

    方法2:

     1 /**
     2      * 处理跳转链接,获取重定向地址
     3      * @param url   源地址
     4      * @return      目标网页的绝对地址
     5      */
     6     public String getAbsUrl(String url){
     7         CloseableHttpClient httpclient = HttpClients.createDefault();
     8         HttpClientContext context = HttpClientContext.create();
     9         HttpGet httpget = new HttpGet(url);
    10         CloseableHttpResponse response = null;
    11         String absUrl = null;
    12         try {
    13             response = httpclient.execute(httpget, context);
    14             HttpHost target = context.getTargetHost();
    15             List<URI> redirectLocations = context.getRedirectLocations();
    16             URI location = URIUtils.resolve(httpget.getURI(), target, redirectLocations);
    17             System.out.println("Final HTTP location: " + location.toASCIIString());
    18             absUrl = location.toASCIIString();          
    19         }catch(IOException e){
    20             e.printStackTrace();
    21         }catch (URISyntaxException e) {         
    22             e.printStackTrace();
    23         }finally {
    24             try {
    25                 httpclient.close();
    26                 response.close();
    27             } catch (IOException e) {               
    28                 e.printStackTrace();
    29             }
    30         }
    31         return absUrl;
    32     }
  • 相关阅读:
    FastJson中JSONObject用法
    复盘项目模板
    java Enum 类型
    Java List集合总结
    Spring boot 使用Slf4j 日志
    java.lang.reflect.UndeclaredThrowableException
    Intellij IDEA 中使用 Debug
    Java 13位时间戳转换日期格式
    Java 时间格式转换
    Spring boot 自定义注解
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/11429834.html
Copyright © 2020-2023  润新知