Android HttpURLConnection: обрабатывать перенаправления HTTP

Я использую HttpURLConnection для получения URL-адреса именно так:

 URL url = new URL(address); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setInstanceFollowRedirects(true); // ... 

Теперь я хочу узнать, было ли перенаправление и если он был постоянным (301) или временным (302), чтобы обновить URL-адрес в базе данных в первом случае, но не во втором.

Возможно ли это при использовании переадресации обработки HttpURLConnection и если, как?

Solutions Collecting From Web of "Android HttpURLConnection: обрабатывать перенаправления HTTP"

Просто вызовите getUrl() в экземпляре 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); 
 private HttpURLConnection openConnection(String url) throws IOException { HttpURLConnection connection; boolean redirected; do { connection = (HttpURLConnection) new URL(url).openConnection(); int code = connection.getResponseCode(); redirected = code == HTTP_MOVED_PERM || code == HTTP_MOVED_TEMP || code == HTTP_SEE_OTHER; if (redirected) { url = connection.getHeaderField("Location"); connection.disconnect(); } } while (redirected); return connection; }