java - 网页重定向如何在此页面中工作?

标签 java javascript url redirect jsoup

我正在尝试从此页面检索链接:http://www.seas.harvard.edu/academics/areas

页面中间有一个名为“计算机科学”的链接。其基础链接为“/academics/areas/computer-science”。我可以使用 Java 内置 URL 类将其转换为绝对 URL,获得“http://www.seas.harvard.edu/academics/areas/computer-science”。

但是,当我在 Chrome 浏览器中单击链接时,绝对 URL 变为“http://www.seas.harvard.edu/computer-science”。

所以我的问题有两个方面:

  1. URL 重定向在此页面中如何工作?
  2. Java 中是否有任何库或方法可以帮助我在重定向后获取 URL?

我需要获取重定向后的 URL,因为我想阅读页面的源代码,但重定向前的 URL 对我不起作用。我正在使用 JSoup 库从 URL 中读取,所以我怀疑它可能是基于 javascript 的重定向。

最佳答案

curl --dump-header [file] [URL] 文件看起来像:

HTTP/1.1 301 Moved Permanently
Age: 0
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
Content-Type: text/html
Date: Tue, 13 Aug 2013 13:00:12 GMT
ETag: "1376398812"
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Tue, 13 Aug 2013 13:00:12 GMT
Location: http://www.seas.harvard.edu/computer-science
Server: nginx
Vary: Accept-Encoding
Via: 1.1 varnish
X-AH-Environment: prod
X-Cache: MISS
X-Drupal-Cache: MISS
X-Redirect-ID: 44
X-Varnish: 2704315535
transfer-encoding: chunked
Connection: keep-alive

如您所见,这是服务器提供的 301 永久重定向。

获取数据:

您可以使用 HttpURLConnection 进行连接,但在连接之前,请调用 myConn.setInstanceFollowRedirects(true)。遵循重定向,您可以获得输出流并阅读它。

获取 URL 本身:

您可以使用 HttpURLConnection 进行连接,但在连接之前,调用 myConn.setInstanceFollowRedirects(false)跟随重定向。这会将实际 URL 保存在正确的位置。

这里的技巧是,出于某些奇怪的原因,HttpURLConnection 不允许通过name 检索 header ,除非您将其解析为日期。

因此,您需要迭代一个整数,在建立连接后调用 getHeaderFieldKey 并检查它是否等于 Location,如果是,则获取 getHeaderField 使用相同的整数来获取位置。很烦人,我知道。但位置不是日期,这是 JRE 的疏忽。

关于java - 网页重定向如何在此页面中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18209759/

相关文章:

java - 使用 HSQLDB 数据库的 Tomcat 部署应用程序给出 JDBCConnectionException

java - 当用户得到正确答案时递增变量

java - 运行 Word 文档的 Runtime.getRuntime.exec() 问题

apache - Mod_rewrite 不可见 : works when target is a file, 当它是目录时不是

url - GWT 编码的查询参数应该如何在服务器端解码?

java - Windows 上多线程 Java 应用程序 CPU 使用率过低

javascript - jQuery 计算数字之间的持续时间

javascript - 我们可以在 <style> 标签上使用 class 吗?

javascript - Fabric js 自定义旋转图标仅在 iphone 的 google chrome 浏览器中不可见

html - 如何使用 'cite' 属性仅使用 CSS 显示 URL?