我正在通过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
报头字段的值构造重定向的url。在上面的例子中,重定向的url是copenhagen.craigslist.org
有没有什么标准的方法可以让我确定特定的url将重定向到哪个url。
我知道当url重定向到其他url时,服务器会发送一个包含Location
头字段的中间响应,告知重定向的url,但我没有通过url.openConnection();
方法接收到该中间响应。
发布于 2011-03-11 15:28:34
在调用getUrl()之后,只需在URLConnection实例上调用getInputStream():
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 );
发布于 2010-04-18 00:03:46
看看HttpURLConnection
类API documentation,特别是setInstanceFollowRedirects()
。
发布于 2010-04-18 00:23:21
实际上,我建议使用可靠的开源库作为http客户端。如果你看看ASF的http client,你会发现生活变得容易多了。它是一个易于使用的、可伸缩的、健壮的http客户端。
https://stackoverflow.com/questions/2659000
复制相似问题