Java 网页重定向在此网页中如何工作?
我正在尝试从此页面检索链接: 页的中间有一个叫做“计算机科学”的链接。其基本链接为“/学术/领域/计算机科学”。我能够使用Java内置URL类将其转换为绝对URL,获得“” 但是,当我在Chrome浏览器中单击链接时,绝对URL变为“” 所以我的问题有两个:Java 网页重定向在此网页中如何工作?,java,javascript,url,redirect,jsoup,Java,Javascript,Url,Redirect,Jsoup,我正在尝试从此页面检索链接: 页的中间有一个叫做“计算机科学”的链接。其基本链接为“/学术/领域/计算机科学”。我能够使用Java内置URL类将其转换为绝对URL,获得“” 但是,当我在Chrome浏览器中单击链接时,绝对URL变为“” 所以我的问题有两个: URL重定向在此页面中如何工作 Java中是否有任何库或方法可以帮助我在重定向后获取URL 我需要在重定向后获取URL,因为我想阅读页面的源代码,但重定向前的URL对我不起作用。我正在使用JSoup库读取URL,因此我怀疑它可能是基于jav
我需要在重定向后获取URL,因为我想阅读页面的源代码,但重定向前的URL对我不起作用。我正在使用
JSoup
库读取URL,因此我怀疑它可能是基于javascript的重定向。我使用Fiddler进行调查,网站返回链接http://www.seas.harvard.edu/academics/areas/computer-science执行重定向的
我想让你得到真正的网址。您应该对harvard.edu web服务器执行实际请求并解析响应。(重定向URL位于HTTP头中的位置
键中)
对不起,你的第二个问题。我不懂Java
这个问题可能会有帮助()我使用Fiddler进行调查,网站返回链接
http://www.seas.harvard.edu/academics/areas/computer-science执行重定向的
我想让你得到真正的网址。您应该对harvard.edu web服务器执行实际请求并解析响应。(重定向URL位于HTTP头中的位置
键中)
对不起,你的第二个问题。我不懂Java
这个问题可能会有帮助()
.htaccess
和mod_rewrite
重定向。使用Firefox的控制台,我可以看到请求。如下图所示,服务器正在发回一条永久移动的301
消息。这告诉浏览器重定向到响应的位置
标题中返回的地址。
- 如果您使用ready libraries&code将页面加载到例如DOM对象,您可以使用ready HTTP系统加载响应,这可能会导致它自动重定向->您将从加载页面的URL获取URL。如果没有,则必须检查状态代码301或302,当收到这些代码时,更改的URL位于响应的
标题中位置
- 如果您编写了自己的代码来通过TCP套接字加载响应,那么您必须按照正常方式加载响应,但再次检查301和302状态代码,并按照上一节中的说明进行操作
.htaccess
和mod_rewrite
重定向。使用Firefox的控制台,我可以看到请求。如下图所示,服务器正在发回一条永久移动的301
消息。这告诉浏览器重定向到响应的位置
标题中返回的地址。
- 如果您使用ready libraries&code将页面加载到例如DOM对象,您可以使用ready HTTP系统加载响应,这可能会导致它自动重定向->您将从加载页面的URL获取URL。如果没有,则必须检查状态代码301或302,当收到这些代码时,更改的URL位于响应的
标题中位置
- 如果您编写了自己的代码来通过TCP套接字加载响应,那么您必须按照正常方式加载响应,但再次检查301和302状态代码,并按照上一节中的说明进行操作
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.setInstanceFlowRedirects(false)
以不遵循重定向。这将把实际的URL保存在正确的位置
这里的诀窍是,出于某种奇怪的原因,HttpURLConnection不允许按名称检索头,除非您将其解析为日期
因此,您需要迭代一个整数,在建立连接并检查它是否等于Location
之后调用getHeaderFieldKey
,如果等于,则使用相同的整数获取getHeaderField
,以获取位置。讨厌,我知道。但是位置不是日期,这是JRE的疏忽。来自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.setInstanceFlowRedirects(false)
以不遵循重定向。这将把实际的URL保存在正确的位置
这里的诀窍是,出于某种奇怪的原因,HttpURLConnection不允许按名称检索头,除非您将其解析为日期
因此,您需要迭代一个整数,在建立连接并检查它是否为