Как получить перенаправленный URL и контент с помощью HttpURLConnection

иногда мой URL перенаправляется на новую страницу, поэтому я хочу получить 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

Он хорошо работает для веб-сайта переполнения стека, но для 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

как я могу решить эту проблему?

3 ответов


просто позвоните getUrl() on 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);

на самом деле мы можем использовать HttpClient, который мы можем установить HttpClient.followRedirect (true) HttpClinent будет обрабатывать перенаправление.


попробовать HtmlUnit:

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