2013-02-24 33 views
9

Đôi khi URL của tôi sẽ chuyển hướng đến một trang mới, vì vậy tôi muốn nhận URL của trang mới.Cách nhận URL và nội dung được chuyển hướng bằng cách sử dụng HttpURLConnection

Đây là mã của tôi:

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

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

Đầu ra là:

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

Nó hoạt động tốt cho trang web Stack Overflow, nhưng đối với trang web sears.com, nó không hoạt động.

Nếu chúng ta bước vào đòn URL:

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

đầu ra vẫn là:

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

Nhưng trên thực tế, trang web sẽ chuyển hướng đến:

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

Làm cách nào để giải quyết vấn đề này?

+0

Liên kết Sears không phải là chuyển hướng HTTP: 'curl --head -I http: // www.sears.com/search = iphone'. Nó có thể chuyển hướng thông qua JavaScript. – apricot

Trả lời

1

thực sự chúng ta có thể sử dụng HttpClient, mà chúng ta có thể đặt HttpClient.followRedirect (true) HttpClinent sẽ xử lý các điều chuyển hướng.

+0

đó là cách tốt nhất ... hoặc bạn phải liên kết chuyển hướng trong tiêu đề một lần nữa và một lần nữa ... đó là quá nhiều phức tạp ... – user2105500

+0

cẩn thận để xây dựng những gì bạn đã làm? Tôi đang ở trong một tình huống tương tự –

18

Đơn giản chỉ cần gọi getUrl() trên URLConnection dụ sau khi gọi 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(); 

Nếu bạn cần phải biết liệu chuyển hướng xảy ra trước khi thực sự nhận được nội dung của nó, đây là đoạn code mẫu:

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

nhưng vẫn không hoạt động cho "http: // www.sears.com/search=iphone", vui lòng giúp tôi tìm hiểu xem có gì không? – user2105500

+0

Sau đó, bạn đang làm điều gì đó sai, bởi vì mã của tôi hoạt động. – syb0rg

+0

mã của bạn hoạt động cho stackoverflow.com/questions/88326/, nhưng không phải cho sear.com Tôi đoán có lẽ sear.com không phải là chuyển hướng. Nó nhận được một cái gì đó từ máy chủ. – user2105500

-1

Thử HtmlUnit:

final WebClient webClient = new WebClient(); 
HtmlPage page = webClient.getPage("http://www.sears.com/search=phone"); 
String finalUrl = page.getUrl().toString(); // the redirected url 
Các vấn đề liên quan