Java 获取网络302重定向URL的方法

所属分类: 软件编程 / java 阅读数: 23
收藏 0 赞 0 分享

方法1:

import java.net.HttpURLConnection;
import java.net.URL;
 
import org.junit.Assert;
import org.junit.Test;
 
public class GetRedirectUrlTest {
  @Test
  public void test_getRedirectUrl() throws Exception {
    String url="http://www.baidu.com/link?url=ByBJLpHsj5nXx6DESXbmMjIrU5W4Eh0yg5wCQpe3kCQMlJK_RJBmdEYGm0DDTCoTDGaz7rH80gxjvtvoqJuYxK";
    String expectUrl="http://www.zhihu.com/question/20583607/answer/16597802";
    String redictURL = getRedirectUrl(url);
    Assert.assertEquals(expectUrl, redictURL);
  }
  
  /**
   * 获取重定向地址
   * @param path
   * @return
   * @throws Exception
   */
  private String getRedirectUrl(String path) throws Exception {
    HttpURLConnection conn = (HttpURLConnection) new URL(path)
        .openConnection();
    conn.setInstanceFollowRedirects(false);
    conn.setConnectTimeout(5000);
    return conn.getHeaderField("Location");
  }
}

方法2:

/**
   * 处理跳转链接,获取重定向地址
   * @param url  源地址
   * @return   目标网页的绝对地址
   */
  public String getAbsUrl(String url){
    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpClientContext context = HttpClientContext.create();
    HttpGet httpget = new HttpGet(url);
    CloseableHttpResponse response = null;
    String absUrl = null;
    try {
      response = httpclient.execute(httpget, context);
      HttpHost target = context.getTargetHost();
      List<URI> redirectLocations = context.getRedirectLocations();
      URI location = URIUtils.resolve(httpget.getURI(), target, redirectLocations);
      System.out.println("Final HTTP location: " + location.toASCIIString());
      absUrl = location.toASCIIString();     
    }catch(IOException e){
      e.printStackTrace();
    }catch (URISyntaxException e) {     
      e.printStackTrace();
    }finally {
      try {
        httpclient.close();
        response.close();
      } catch (IOException e) {        
        e.printStackTrace();
      }
    }
    return absUrl;
  }

以上就是2中最常用的方法,感谢大家对脚本之家的支持。

更多精彩内容其他人还在看

Springmvc restful配置遇到的小坑

本文是小编给大家带了的Springmvc restful配置遇到的小小坑,小编给大家带来了问题原因及解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
收藏 0 赞 0 分享

Java中的匿名内部类小结

java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java的云打印Lodop

这篇文章主要介绍了Java的云打印Lodop 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java线程池框架核心代码解析

这篇文章主要针对Java线程池框架核心代码进行详细解析,分析Java线程池框架的实现ThreadPoolExecutor,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java 交换两个变量的数值实现方法

下面小编就为大家带来一篇Java 交换两个变量的数值实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

全面了解JAVA_BaseDAO数据处理类

下面小编就为大家带来一篇全面了解JAVA_BaseDAO数据处理类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java、python、JavaScript以及jquery循环语句的区别

本篇文章主要介绍java、python、JavaScript以及jquery的循环语句的区别,这里整理了它们循环语句语法跟示例,以便大家阅读,更好的区分它们的不同
收藏 0 赞 0 分享

基于JDBC封装的BaseDao(实例代码)

下面小编就为大家带来一篇基于JDBC封装的BaseDao(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

简单通用JDBC辅助类封装(实例)

下面小编就为大家带来一篇简单通用JDBC辅助类封装(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈java线程中生产者与消费者的问题

下面小编就为大家带来一篇浅谈java线程中生产者与消费者的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多