Как получить новый URL в перенаправлении http 302 в Java? - PullRequest
1 голос
/ 09 июля 2011

Я наткнулся на страницу HTTP 302, на которой написано Location: //-now-playing.html (что выглядит странно, потому что обычно это полный URL, то есть Location: <a href="http://www.somewhere.else" rel="nofollow">http://www.somewhere.else</a>), и это приводит к сбою моего HttpURLConnection con с con.setFollowRedirects(true).Тем не менее, мой браузер не отказывает с этой инструкцией.Как я могу получить true URL в этом случае?

Вы можете увидеть полный запрос и ответ в этом случае, попробовав этот URL http://cinemaclock.com/showtimes/ont/Toronto/43844/The_Trip в www.web-sniffer.сеть .Спасибо.

РЕДАКТИРОВАТЬ: Спасибо всем.Я узнал, что это плохой URL.Ложная тревога, но спасибо всем.

Ответы [ 4 ]

1 голос
/ 09 июля 2011

Это ошибка, и вам нужно разобраться с этим самостоятельно. Вы можете получить местоположение по:

con.getHeaderField("Location");
0 голосов
/ 09 июля 2011

У вас может быть просто плохой возврат, или у вас происходит абсолютное перенаправление местоположения, без указания имени хоста, которое происходит здесь.

В то время как стандарт говорит, что отклик местоположения должен иметь полный absoulteURI, большинство браузеров и программ без проблем справятся с откликом относительного местоположения.

У этого есть две косые черты перед ним, что, безусловно, является дурным тоном, но большинство серверов автоматически предполагают, что два // вместе в URL действительно означают только один, поэтому сервер, как правило, будет обслуживать одну и ту же страницу, если вы скажете запросить http://www.xyz.com/index.html и спроситьдля http://www.xyz.com//index.html.

Теперь, чтобы решить вашу проблему, если это действительно означает перенаправление с относительным URL, вам нужно будет построить абсолютный URL из информации заголовка.Во-первых, поскольку его относительное местоположение перенаправляет его безопасно, чтобы сказать, что протокол тот же, что вы использовали HTTP, так что это первая часть URL, которую вы должны попробовать:

http://

Следующая часть, которую вынужен HOSTNAME, он должен быть в переменной HOST ответа HTTP-заголовка. (www.xyz.com)

http://www.xyz.com

и, наконец, путь, который просторасположение заголовка в ответ добавляется к указанному выше

http://www.xyz.com/-now-playing.html

Самый простой способ проверить это просто запустить браузер и попытаться выяснить, получит ли этот запрос вас.Для меня это выглядит как плохой URL, потому что тот факт, что имя html-файла начинается с дефиса, что является необычной формой, но я бы хотя бы ПОПРОБОВАЛ, чтобы посмотреть, даст ли вам создание URL-адреса что-то.удачи.

0 голосов
/ 09 июля 2011

Во-первых, по крайней мере, на моем компьютере Safari и Chrome оба терпят неудачу при этом перенаправлении, поэтому кажется, что наиболее распространенным поведением является просто возврат ошибки и сбой, что может быть поведением, которое вы на самом деле хотите вернуть пользователю.

Если вы все еще хотите интерполировать правильный URL-адрес, а не потерпеть неудачу, вам, вероятно, придется выполнить специальный анализ поля перенаправления Location:, чтобы учесть неправильный URL-адрес.

0 голосов
/ 09 июля 2011

Вы делаете правильные вещи, глядя на значение заголовка Location:.

К сожалению, вы просто получаете плохой URL здесь! : - (

...