响应代码202,不是合格的错误代码

时间:2009-12-11 19:06:57

标签: python

我正在使用我发布文件的API。但是,当我收到响应时,HTTP状态代码是202.这是预期的,但此外API也将响应XML内容。

因此,在我的try / except块中,urllib2.urlopen将导致引发的urllib2.HTTPError并破坏XML内容。

try:
    response = urllib2.urlopen(req)
except urllib2.HTTPError, http_e:
    if http_e.code == 202:
        print 'accepted!'
        pass

print response.read() # UnboundLocalError: local variable 'response' referenced before assignment

我如何期望202并保留响应内容,但不会引发错误?

1 个答案:

答案 0 :(得分:4)

修改

愚蠢,我忘了检查urllib2返回的异常。它具有我为httplib提供的所有属性。这应该适合你:

try:
    urllib2.urlopen(req)
except urllib2.HTTPError, e:
    print "Response code",e.code # prints 404
    print "Response body",e.read() # prints the body of the response...
                                   # ie: your XML
    print "Headers",e.headers.headers

<强>原始

在这种情况下,假设您使用HTTP作为传输协议,那么httplib库可能会更幸运:

>>> import httplib
>>> conn = httplib.HTTPConnection("www.stackoverflow.com")
>>> conn.request("GET", "/dlkfjadslkfjdslkfjd.html")
>>> r = conn.getresponse()
>>> r.status
301
>>> r.reason
'Moved Permanently'
>>> r.read()
'<head><title>Document Moved</title></head>\n<body><h1>Object Moved</h1>
 This document may be found   
 <a HREF="http://stackoverflow.com/dlkfjadslkfjdslkfjd.html">here</a></body>'

您可以进一步使用r.getheaders()等来检查响应的其他方面。