2013-02-24 5 views
9

Manchmal wird meine URL auf eine neue Seite umleiten, also möchte ich die URL der neuen Seite erhalten.Wie URL und Inhalt umgeleitet werden mit HttpURLConnection

ist hier mein Code:

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

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

Die Ausgabe lautet:

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

Es funktioniert gut für die Stack Overflow-Website, aber für die Website sears.com funktioniert es nicht.

Wenn wir die URL Schlag eingeben:

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

der Ausgang ist immer noch:

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

Aber tatsächlich, wird die Seite umleiten zu:

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

Wie kann ich dieses Problem lösen?

+0

Der Sears-Link ist keine HTTP-Weiterleitung: 'curl --head -I http: // www.sears.com/search = iphone'. Es wird wahrscheinlich durch JavaScript umgeleitet. – apricot

Antwort

1

tatsächlich können wir HttpClient verwenden, den wir festlegen können HttpClient.followRedirect (true) HttpClinent wird die Umleitung Dinge behandeln.

+0

das ist der beste Weg ... oder Sie müssen Redirect-Link in der Kopfzeile immer wieder nehmen ... was zu kompliziert ist ... – user2105500

+0

Pflege, um zu erarbeiten, was Sie getan haben? Ich bin in einer ähnlichen Situation –

18

einfach getUrl() auf URLConnection Instanz rufen nach getInputStream() Aufruf:

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(); 

Wenn Sie, ob die Umleitung tatsächlich passiert ist wissen müssen, bevor es seinen Inhalt bekommen, hier ist der Beispielcode:

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

funktioniert aber immer noch nicht für "http://www.sears.com/search=iphone", bitte helfen Sie mir bitte herauszufinden, was los ist? – user2105500

+0

Dann machst du etwas falsch, weil mein Code funktioniert. – syb0rg

+0

Ihr Code funktioniert für stackoverflow.com/questions/88326/, aber nicht für sear.com Ich denke, vielleicht ist sear.com keine Weiterleitung. Es ist etwas vom Server bekommen. – user2105500

Verwandte Themen