2011-02-10 4 views
2

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

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

は、問題の例です:

import urllib2 

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

print req.info() 

プリントの出力がリダイレクトされたリクエストの対象の応答ヘッダが含まれています。私はオリジナルを見たいと思います。

ご協力いただければ幸いです。

答えて

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であなたのreqに設定できる任意の更なる属性は、結果を経由してあなたに利用できるようにすることができます。

+0

これは私が探していたものです。親切にありがとう。 – Raj

関連する問題