Я пытаюсь получить окончательное расположение заданного URL-адреса (String ref) следующим образом:
HttpURLConnection con = (HttpURLConnection)new URL(ref).openConnection();
con.setInstanceFollowRedirects(true);
con.setRequestProperty("User-Agent","");
int responseCode = con.getResponseCode();
return con.getURL().toString();
Он работает в большинстве случаев, но редко возвращает URL-адрес, который все же содержит другое перенаправление.
Что я здесь делаю не так?
Почему я получаю responseCode = 3xx даже после вызова setInstanceFollowRedirects (true)?
ОБНОВЛЕНИЕ:
Хорошо, responseCode иногда может быть 3xx.
Если это произойдет, я верну вместо него con.getHeaderField ("Location").
Теперь код:
HttpURLConnection con = (HttpURLConnection)new URL(ref).openConnection();
con.setInstanceFollowRedirects(true);
con.setRequestProperty("User-Agent","");
int responseType = con.getResponseCode()/100;
while (responseType == 1)
{
Thread.sleep(10);
responseType = con.getResponseCode()/100;
}
if (responseType == 3)
return con.getHeaderField("Location");
return con.getURL().toString();
Буду признателен за комментарий, если кто-нибудь увидит что-то не так с приведенным выше кодом.
ОБНОВЛЕНИЕ
- Удалена обработка кода 1xx, поскольку, по мнению большинства комментаторов, в этом нет необходимости.
Проверка наличия заголовка Location перед его возвратом для обработки кода 304.
HttpURLConnection con = (HttpURLConnection)new URL(ref).openConnection(); con.setInstanceFollowRedirects(true); con.setRequestProperty("User-Agent",""); if (con.getResponseCode()/100 == 3) { String target = con.getHeaderField("Location"); if (target != null) return target; } return con.getURL().toString();
Location
. - person Mike Samuel   schedule 28.12.2013Location
заголовков ответов и RFC 2616 говорит, что НЕ ДОЛЖЕН для большинства остальных относительноLocation
. Обратите внимание, что он также рекомендует, чтобы пользовательские агенты не выполняли более 5 шагов перенаправления и прекращали перенаправление при обнаружении цикла. - person Mike Samuel   schedule 28.12.2013null
указывает на отсутствующий заголовок, а пустая строка указывает на недопустимое перенаправление на пустой URL-адрес. Я не знаю, что мне делать лучше всего; Я думаю, это зависит от того, зачем вы это делаете. - person Mike Samuel   schedule 28.12.2013