【问题标题】:How to get redirected URL and content using HttpURLConnection如何使用 HttpURLConnection 获取重定向的 URL 和内容
【发布时间】:2013-02-10 00:39:46
【问题描述】:

有时我的 URL 会重定向到新页面,所以我想获取新页面的 URL。

这是我的代码:

URL url = new URL("http://stackoverflow.com/questions/88326/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setInstanceFollowRedirects(true);

System.out.println(conn.getURL().toString());

输出是:

stackoverflow.com/questions/88326/does-elmah-handle-caught-exceptions-as-well

它适用于 Stack Overflow 网站,但不适用于 sears.com 网站。

如果我们输入网址一击:

http://www.sears.com/search=iphone

输出还是:

http://www.sears.com/search=iphone

但实际上,页面会重定向到:

http://www.sears.com/tvs-electronics-phones-all-cell-phones/s-1231477012?keyword=iphone&autoRedirect=true&viewItems=25&redirectType=CAT_REC_PRED

我该如何解决这个问题?

【问题讨论】:

  • Sears 链接不是 HTTP 重定向:curl --head -I http://www.sears.com/search=iphone。它可能通过 JavaScript 重定向。

标签: java httpurlconnection


【解决方案1】:

在调用getInputStream() 后,只需在URLConnection 实例上调用getUrl()

URLConnection con = new URL(url).openConnection();
System.out.println("Orignal URL: " + con.getURL());
con.connect();
System.out.println("Connected URL: " + con.getURL());
InputStream is = con.getInputStream();
System.out.println("Redirected URL: " + con.getURL());
is.close();

如果您需要在实际获取内容之前知道重定向是否发生,这里是示例代码:

HttpURLConnection con = (HttpURLConnection) (new URL(url).openConnection());
con.setInstanceFollowRedirects(false);
con.connect();
int responseCode = con.getResponseCode();
System.out.println(responseCode);
String location = con.getHeaderField("Location");
System.out.println(location);

【讨论】:

  • 但仍然不适用于“http://www.sears.com/search=iphone”,请帮我弄清楚这是怎么回事?
  • 您的代码适用于 stackoverflow.com/questions/88326/,但不适用于 sear.com 我想也许 sear.com 不是重定向。它是从服务器获取一些东西。
  • Sears 链接不是 HTTP 重定向:curl --head -I http://www.sears.com/search=iphone。它可能通过 JavaScript 重定向。
  • 这对我不起作用。我正在尝试扩展此 url skl.sh/thomasfrank11 但当我执行 con.getUrl() 时得到相同的 url
【解决方案2】:

其实我们可以使用HttpClient,我们可以设置HttpClient.followRedirect(true) HttpClinent 将处理重定向的事情。

【讨论】:

  • 这是最好的方法...或者您必须一次又一次地在标题中获取重定向链接...这太复杂了...
  • 想详细说明你做了什么?我也有类似情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2019-09-23
  • 2016-11-08
  • 2018-05-05
  • 2014-01-16
  • 1970-01-01
  • 2014-01-15
相关资源
最近更新 更多