Java - Как найти перенаправленный URL URL?

Я получаю доступ к веб-страницам через Java следующим образом:

URLConnection con = url.openConnection();

Но в некоторых случаях, URL перенаправляет к другому URL. Таким образом, я хочу знать URL, к которому предыдущий URL перенаправил.

Ниже поля заголовка, которые я получил как ответ:

null-->[HTTP/1.1 200 OK]
Cache-control-->[public,max-age=3600]
last-modified-->[Sat, 17 Apr 2010 13:45:35 GMT]
Transfer-Encoding-->[chunked]
Date-->[Sat, 17 Apr 2010 13:45:35 GMT]
Vary-->[Accept-Encoding]
Expires-->[Sat, 17 Apr 2010 14:45:35 GMT]
Set-Cookie-->[cl_def_hp=copenhagen; domain=.craigslist.org; path=/; expires=Sun, 17     Apr 2011 13:45:35 GMT, cl_def_lang=en; domain=.craigslist.org; path=/; expires=Sun, 17 Apr 2011 13:45:35 GMT]
Connection-->[close]
Content-Type-->[text/html; charset=iso-8859-1;]
Server-->[Apache]

Так в настоящее время я создаю перенаправленный URL из значения Set-Cookie поле заголовка. В вышеупомянутом случае перенаправленный URL copenhagen.craigslist.org

Есть ли любой стандартный путь, через который я могу определить, какой URL конкретный URL собирается перенаправить.

Я знаю, что, когда URL перенаправляет к другому URL, сервер отправляет промежуточный ответ, содержащий a Location поле заголовка, которое говорит перенаправленный URL, но я не получаю тот промежуточный ответ через url.openConnection(); метод.

60
задан Yatendra Goel 17 April 2010 в 16:08
поделиться

3 ответа

Вам необходимо преобразовать URLConnection в HttpURLConnection и указать его , а не следовать перенаправления путем установки HttpURLConnection # setInstanceFollowRedirects () на false . Вы также можете установить его глобально с помощью HttpURLConnection # setFollowRedirects () .

Тогда вам нужно только самостоятельно обрабатывать перенаправления. Проверьте код ответа с помощью HttpURLConnection # getResponseCode () , возьмите заголовок Location с помощью URLConnection # getHeaderField () и затем отправьте новый HTTP-запрос для него.

54
ответ дан 24 November 2019 в 17:37
поделиться

Я бы действительно предложил использовать надежную библиотеку с открытым исходным кодом в качестве http-клиента. Если вы посмотрите http-клиент от ASF, вы обнаружите, что жизнь намного проще. Это простой в использовании, масштабируемый и надежный клиент для http.

0
ответ дан 24 November 2019 в 17:37
поделиться

Взгляните на HttpURLConnection class API-документацию , особенно setInstanceFollowRedirects () .

1
ответ дан 24 November 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: