Как получить доступ к исходным заголовкам ответа, которые содержат перенаправление при использовании urllib2.urlopen - PullRequest
2 голосов
/ 10 февраля 2011

Я пытаюсь проанализировать заголовок местоположения ответа HTTP, который возвращается после использования urllib2.urlopen, но единственные заголовки ответа, которые я получаю, - от целевого перенаправления - не исходный ответ, который содержит заголовок местоположения .

Я следовал за другими вопросами по переполнению стека, которые предлагают подкласс urllib2.HTTPRedirectHandler, но я все еще не могу понять, как получить доступ к исходному ответу, который urlopen заканчивается следующим.

Вот пример проблемы:

import urllib2

req = urllib2.urlopen("http://wp.me")

print req.info()

Выходные данные print содержат заголовки ответа цели перенаправленного запроса. Я хотел бы увидеть оригинал.

Любая помощь будет оценена.

1 Ответ

6 голосов
/ 10 февраля 2011

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

import urllib2

class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
    def http_error_302(self, req, fp, code, msg, headers):
        result = urllib2.HTTPRedirectHandler.http_error_302(self, req, fp,
                                                                 code, msg,
                                                                 headers)
        result.status = code
        result.headers = headers
        return result

request = urllib2.Request("http://wp.me")
opener = urllib2.build_opener(SmartRedirectHandler())
obj = opener.open(request)
print 'The original headers where', obj.headers
print 'The Redirect Code was', obj.status

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

...