2013-02-24 10 views
9

Czasami mój adres URL przekierowuje do nowej strony, więc chcę uzyskać adres URL nowej strony.Jak uzyskać przekierowany adres URL i zawartość za pomocą HttpURLConnection

Oto mój kod:

URL url = new URL("http://stackoverflow.com/questions/88326/"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setInstanceFollowRedirects(true); 

System.out.println(conn.getURL().toString()); 

Wyjście jest:

stackoverflow.com/questions/88326/does-elmah-handle-caught-exceptions-as-well

Działa dobrze na stronie Stack Overflow, ale na stronie sears.com nie działa.

Jeśli wchodzimy cios URL:

http://www.sears.com/search=iphone 

wyjście jest nadal:

http://www.sears.com/search=iphone

Ale faktycznie, strona przekieruje do:

http://www.sears.com/tvs-electronics-phones-all-cell-phones/s-1231477012?keyword=iphone&autoRedirect=true&viewItems=25&redirectType=CAT_REC_PRED 

Jak mogę rozwiązać ten problem?

+0

Łącze Sears nie jest przekierowaniem HTTP: 'curl --head -I http: // www.sears.com/search = iphone'. Prawdopodobnie przekierowuje przez JavaScript. – apricot

Odpowiedz

1

faktycznie możemy użyć HttpClient, który możemy ustawić HttpClient.followRedirect (true) HttpClinent zajmie się przekierowaniem rzeczy.

+0

to najlepszy sposób ... lub musisz wielokrotnie przekierowywać link w nagłówku ... co jest zbyt skomplikowane ... – user2105500

+0

Czy chcesz opracować to, co zrobiłeś? Jestem w podobnej sytuacji –

18

Wystarczy zadzwonić getUrl() na URLConnection przykład po wywołaniu 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(); 

Jeśli chcesz wiedzieć, czy przekierowania zdarzyło rzeczywiście coraz to zawartość, oto przykładowy kod:

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

ale nadal nie działa dla "http: // www.sears.com/search=iphone", proszę, proszę pomóż mi dowiedzieć się co jest grane? – user2105500

+0

Następnie robisz coś nie tak, ponieważ mój kod działa. – syb0rg

+0

Twój kod działa dla stackoverflow.com/questions/88326/, ale nie dla sear.com Myślę, że może sear.com nie jest przekierowaniem. To jest coś z serwera. – user2105500

-1

Try HtmlUnit:

final WebClient webClient = new WebClient(); 
HtmlPage page = webClient.getPage("http://www.sears.com/search=phone"); 
String finalUrl = page.getUrl().toString(); // the redirected url 
Powiązane problemy