2013-02-24 59 views
9

URLが新しいページにリダイレクトされることがあるため、新しいページのURLを取得したい場合があります。ここでHttpURLConnectionを使用してリダイレクトされた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 Webサイトではうまく動作しますが、sears.comサイトではうまく動作しません。

我々はURLブロー入力した場合:

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 

どうすればこの問題を解決できますか?

+0

SearsリンクはHTTPリダイレクトではありません: 'curl --head -I http:// www.sears.com/search = iphone'。おそらく、JavaScript経由でリダイレクトされます。 – apricot

答えて

1

実際にはHttpClientを使用することができます.HttpClient.followRedirect(true)を設定することができます HttpClientはリダイレクトを処理します。

+0

これは最善の方法です...またはヘッダーのリダイレクトリンクを何度もやり直さなければなりません...あまりにも複雑です... – user2105500

+0

あなたが何をやったのか詳しく教えてください。私は似たような状況にいる –

18

単に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); 
+2

でも "http:// www.sears.com/search=iphone"ではまだ動作しません。何が起きているのか理解してください。 – user2105500

+0

次に、私のコードが機能するので、何か間違ったことをしています。 – syb0rg

+0

あなたのコードはstackoverflow.com/questions/88326/で動作しますが、sear.comでは動作しません。おそらくsear.comはリダイレクトではないと思います。それはサーバーから何かを得ることです。 – user2105500

-1

トライをHtmlUnit

final WebClient webClient = new WebClient(); 
HtmlPage page = webClient.getPage("http://www.sears.com/search=phone"); 
String finalUrl = page.getUrl().toString(); // the redirected url 
関連する問題