2

urllib2.urlopenを使用した後に返されるHTTP応答のロケーションヘッダーを解析しようとしていますが、受信する応答ヘッダーはターゲットリダイレクトからのものだけです---ロケーションヘッダーを含む元の応答ではありません。

urllib2.HTTPRedirectHandlerをサブクラス化することを提案するStackOverflowに関する他の質問に従いましたが、urlopenがたどる元の応答にアクセスする方法をまだ理解できません。

問題の例を次に示します。

import urllib2

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

print req.info()

printの出力には、リダイレクトされた要求のターゲットの応答ヘッダーが含まれます。原作を見たいのですが。

どんな助けでもいただければ幸いです。

4

1 に答える 1

6

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でリクエストに設定できるその他の属性は、結果を介して利用できるようにすることができます。

于 2011-02-10T04:58:14.063 に答える