как получить окончательный перенаправленный URL - PullRequest
1 голос
/ 22 июля 2010

Я использую Google App Engine для получения URL-адреса фида. Несколько URL-адресов - 301 перенаправление. Я хочу получить окончательный URL-адрес, который возвращает мне результат

Я использую универсальный считыватель каналов для анализа URL-адреса. Есть ли какая-либо функция или функция, которая может дать мне окончательный URL-адрес?

Ответы [ 3 ]

3 голосов
/ 23 июля 2010

Если вы используете urlfetch API , вы можете просто получить доступ к атрибуту final_url объекта ответа , полученного из urlfetch.fetch(), при условии, что вы установили follow_redirects до True:

>>> from google.appengine.api import urlfetch
>>> url_that_redirects = 'http://www.example.com/redirect/'
>>> resp = urlfetch.fetch(url=url_that_redirects, follow_redirects=False)
>>> resp.status_code
302 # or 301 or whatever
>>> resp = urlfetch.fetch(url=url_that_redirects, follow_redirects=True)
>>> resp.status_code
200
>>> resp.final_url
'http://www.example.com/final_url/'

Обратите внимание, что аргумент ключевого слова follow_redirects по умолчанию равен True, поэтому вам не нужно устанавливать его явно.

3 голосов
/ 22 июля 2010

Невозможно получить «окончательный» URL при разборе, чтобы разрешить его, вам нужно как минимум выполнить операцию HTTP HEAD

0 голосов
/ 22 июля 2010

Вы можете сделать это, обрабатывая перенаправления вручную. При вызове fetch введите follow_redirects=False. Если HTTP-статус вашего объекта ответа является кодом перенаправления, либо 301, либо 302, возьмите заголовок ответа Location и извлекайте его, пока статус HTTP не станет чем-то другим. Добавьте проверку работоспособности (возможно, максимум 5 перенаправлений), чтобы избежать циклов перенаправления.

...