2011-02-10 4 views
2

urllib2.urlopen을 사용한 후에 반환되는 HTTP 응답의 위치 헤더를 구문 분석하려고하지만 수신 한 유일한 응답 헤더 대상 리디렉션에서 왔으며 원래 위치 응답 헤더가 아닙니다.urllib2.urlopen을 사용할 때 리디렉션이 포함 된 원래 응답 헤더에 액세스하는 방법

urllib2.HTTPRedirectHandler를 하위 클래스로 제안하는 스택 오버플로에 대한 다른 질문을 수행했지만 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

관련 문제