如何使用urlib2在错误时访问响应头?

2024-10-03 04:34:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用Harvest API(http://www.getharvest.com/api). 当客户机超过其配额时,将返回503响应。在这个响应中,应该有一个名为“retryafter”的头,它告诉我在重试之前要等待多长时间。在

当调用失败时,如何访问响应头?我正在获取HTTPError异常,但不知道如何从中获取头。在

我可以用异常。读取(),但那只是没有标题的正文。在

一些相关代码:

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() )

Tags: selfcomapihttpurlreadrequestwww
3条回答

在阅读错误()返回body,并且错误信息()返回标题

(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'}

所有相关的响应信息都可以从捕获的异常中获得。在

试试这个:

   logger.debug(err.headers)

这是一本字典,因此使用err.headers['Retry-After']

相关问题 更多 >