我通过java访问网页如下:
URLConnection con = url.openConnection();
但在某些情况下,一个 url 会重定向到另一个 url。所以我想知道上一个url重定向到的url。
以下是我收到的响应头字段:
null-->[HTTP/1.1 200 OK]
Cache-control-->[public,max-age=3600]
last-modified-->[Sat, 17 Apr 2010 13:45:35 GMT]
Transfer-Encoding-->[chunked]
Date-->[Sat, 17 Apr 2010 13:45:35 GMT]
Vary-->[Accept-Encoding]
Expires-->[Sat, 17 Apr 2010 14:45:35 GMT]
Set-Cookie-->[cl_def_hp=copenhagen; domain=.craigslist.org; path=/; expires=Sun, 17 Apr 2011 13:45:35 GMT, cl_def_lang=en; domain=.craigslist.org; path=/; expires=Sun, 17 Apr 2011 13:45:35 GMT]
Connection-->[close]
Content-Type-->[text/html; charset=iso-8859-1;]
Server-->[Apache]
所以目前,我正在从 Set-Cookie
header 字段的值构造重定向的 url。在上述情况下,重定向的 url 是 copenhagen.craigslist.org
是否有任何标准方法可以让我确定特定 url 将重定向到哪个 url。
我知道当一个 url 重定向到其他 url 时,服务器会发送一个中间响应,其中包含一个 Location
header 字段,该字段告诉重定向的 url,但我没有通过 接收到该中间响应url.openConnection();
方法。
最佳答案
在调用 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 );
关于Java - 如何找到网址的重定向网址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2659000/