如何用Java实现获取网络302重定向后的目标URL地址?

2026-06-10 16:221阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计312个文字,预计阅读时间需要2分钟。

如何用Java实现获取网络302重定向后的目标URL地址?

方法1:使用HttpURLConnection获取重定向URL

javaimport 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/l; URL obj=new URL(url); HttpURLConnection con=(HttpURLConnection) obj.openConnection(); con.setRequestMethod(GET); con.connect(); String newUrl=con.getHeaderField(Location); Assert.assertEquals(http://www.baidu.com/, newUrl); }}

方法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="www.baidu.com/link?url=ByBJLpHsj5nXx6DESXbmMjIrU5W4Eh0yg5wCQpe3kCQMlJK_RJBmdEYGm0DDTCoTDGaz7rH80gxjvtvoqJuYxK"; String expectUrl="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实现获取网络302重定向后的目标URL地址?
标签:方法

本文共计312个文字,预计阅读时间需要2分钟。

如何用Java实现获取网络302重定向后的目标URL地址?

方法1:使用HttpURLConnection获取重定向URL

javaimport 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/l; URL obj=new URL(url); HttpURLConnection con=(HttpURLConnection) obj.openConnection(); con.setRequestMethod(GET); con.connect(); String newUrl=con.getHeaderField(Location); Assert.assertEquals(http://www.baidu.com/, newUrl); }}

方法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="www.baidu.com/link?url=ByBJLpHsj5nXx6DESXbmMjIrU5W4Eh0yg5wCQpe3kCQMlJK_RJBmdEYGm0DDTCoTDGaz7rH80gxjvtvoqJuYxK"; String expectUrl="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实现获取网络302重定向后的目标URL地址?
标签:方法