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

 更新时间:2019年08月29日 16:54:04   作者:Boblim  
在本篇文章里小编给大家整理的是关于Java 获取网络302重定向URL的方法以及相关知识点,有兴趣的朋友们参考下。

方法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中最常用的方法,感谢大家对脚本之家的支持。

相关文章

  • Java中遍历集合的并发修改异常解决方案实例代码

    Java中遍历集合的并发修改异常解决方案实例代码

    当你遍历集合的同时,又往集合中添加或者删除元素,就可能报并发修改异常,下面这篇文章主要给大家介绍了关于Java中遍历集合的并发修改异常解决方案的相关资料,需要的朋友可以参考下
    2022-12-12
  • 解决Springboot启动报错:类文件具有错误的版本61.0,应为 52.0

    解决Springboot启动报错:类文件具有错误的版本61.0,应为 52.0

    这篇文章主要给大家介绍了关于解决Springboot启动报错:类文件具有错误的版本 61.0,应为 52.0的相关资料,这是查阅了网上的很多资料才解决的,分享给大家,需要的朋友可以参考下
    2023-01-01
  • 使用MyBatis拦截器实现sql查询权限动态修改代码实例

    使用MyBatis拦截器实现sql查询权限动态修改代码实例

    这篇文章主要介绍了使用MyBatis拦截器实现sql查询权限动态修改代码实例,为了不耦合,现在的方案是在需要鉴权的Mybatis Mapper方法上增加一个注解,在运行过程中判断该注解存在即对sql进行修改,需要的朋友可以参考下
    2023-08-08
  • java事件处理模型知识点总结

    java事件处理模型知识点总结

    在本篇文章里小辫给大家分享的是一篇关于java事件处理模型知识点总结内容,有兴趣的朋友们可以学习下。
    2021-01-01
  • 详谈Java几种线程池类型介绍及使用方法

    详谈Java几种线程池类型介绍及使用方法

    下面小编就为大家带来一篇详谈Java几种线程池类型介绍及使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • java开发ServiceLoader实现机制及SPI应用

    java开发ServiceLoader实现机制及SPI应用

    这篇文章主要为大家介绍了java开发ServiceLoader实现机制及SPI应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Spring Boot 2和Redis例子实现过程解析

    Spring Boot 2和Redis例子实现过程解析

    这篇文章主要介绍了Spring Boot2发布与调用REST服务过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • SpringBoot图文并茂讲解登录拦截器

    SpringBoot图文并茂讲解登录拦截器

    其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了,下面这篇文章主要给大家介绍了关于如何在Springboot实现登陆拦截器功能的相关资料,需要的朋友可以参考下
    2022-06-06
  • Java中的Semaphore信号量深入解析

    Java中的Semaphore信号量深入解析

    这篇文章主要介绍了Java中的Semaphore信号量深入解析,Semaphore是Java里面另外一个基本的并发工具包类,主要的的作用是用来保护共享资源的访问的,也就是仅仅允许一定数量的线程访问共享资源,需要的朋友可以参考下
    2023-11-11
  • HashMap底层实现原理详解

    HashMap底层实现原理详解

    这篇文章主要介绍了HashMap底层实现原理详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02

最新评论