Я получаю доступ к веб-страницам через 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();
метод.
Вам необходимо преобразовать URLConnection
в HttpURLConnection
и указать его , а не следовать перенаправления путем установки HttpURLConnection # setInstanceFollowRedirects ()
на false
. Вы также можете установить его глобально с помощью HttpURLConnection # setFollowRedirects ()
.
Тогда вам нужно только самостоятельно обрабатывать перенаправления. Проверьте код ответа с помощью HttpURLConnection # getResponseCode ()
, возьмите заголовок Location
с помощью URLConnection # getHeaderField ()
и затем отправьте новый HTTP-запрос для него.
Я бы действительно предложил использовать надежную библиотеку с открытым исходным кодом в качестве http-клиента. Если вы посмотрите http-клиент от ASF, вы обнаружите, что жизнь намного проще. Это простой в использовании, масштабируемый и надежный клиент для http.
Взгляните на HttpURLConnection
class API-документацию , особенно setInstanceFollowRedirects ()
.