2011-05-15 10 views
1

Harvest API (http://www.getharvest.com/api)를 사용하고 있습니다. 클라이언트가 할당량을 초과하면 503 응답이 반환됩니다. 그 응답에는 다시 시도하기 전에 얼마나 오래 기다려야하는지 알려주는 "Retry-After"라는 헤더가 있어야합니다.urlib2를 사용하여 오류가 발생했을 때 어떻게 응답 헤더에 액세스합니까?

호출이 실패하면 어떻게 응답 헤더에 액세스합니까? HTTPError 예외를 잡는 중이지만 헤더를 가져 오는 방법을 알아낼 수 없습니다.

응답 본문을 exception.read()로 가져올 수 있지만 헤더가없는 본문입니다.

일부 관련 코드 :

try: 
    request = urllib2.Request(url=self.uri+url, headers=self.headers) 
    r = urllib2.urlopen(request) 
    xml = r.read() 
    return parseString(xml) 
except urllib2.HTTPError as err: 
    logger.debug("EXCEPTION: %s" % err.read()) 

답변

3

이 시도 :

logger.debug(err.headers) 

그것은 따라서 err.headers['Retry-After']

+0

감사합니다) (본문 및 err.info를 반환 헤더를 반환합니다. 불행히도, 그들은 실제로 그들이 보낼 것이라고 말하는 헤더를 보내고 있지 않습니다 : ( –

+0

wireshark/firebug로 정확한 응답을 확인 했습니까? 아마도 파이썬의 구문 분석에 결함이 있습니까? –

1
(Pdb) pp err.__dict__ 
{'__iter__': <bound method _fileobject.__iter__ of <socket._fileobject object at 0x2b9a8e923950>>, 
'code': 404, 
'fileno': <bound method _fileobject.fileno of <socket._fileobject object at 0x2b9a8e923950>>, 
'fp': <addinfourl at 47942867504160 whose fp = <socket._fileobject object at 0x2b9a8e923950>>, 
'hdrs': <httplib.HTTPMessage instance at 0x2b9a91964a70>, 
'headers': <httplib.HTTPMessage instance at 0x2b9a91964a70>, 
'msg': 'Not Found', 
'next': <bound method _fileobject.next of <socket._fileobject object at 0x2b9a8e923950>>, 
'read': <bound method _fileobject.read of <socket._fileobject object at 0x2b9a8e923950>>, 
'readline': <bound method _fileobject.readline of <socket._fileobject object at 0x2b9a8e923950>>, 
'readlines': <bound method _fileobject.readlines of <socket._fileobject object at 0x2b9a8e923950>>, 
'url': 'http://www.heise.de/fo'} 

모든 관련 응답 정보가 잡힌 예외에서 사용할 수 있습니다 사용, 사전입니다.

0

err.read() 작품이,

관련 문제