代码之家  ›  专栏  ›  技术社区  ›  John Giotta iaforek

响应代码202,不是限定的错误代码

  •  2
  • John Giotta iaforek  · 技术社区  · 14 年前

    我正在使用一个我将文件发布到的API。但是,当我收到响应时,HTTP状态代码是202。这是意料之中的,但除此之外,API还将使用XML内容进行响应。

    因此,在我的try/except块urlib2.urlopen中,会导致引发urlib2.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 回复  |  直到 14 年前
        1
  •  4
  •   Jarret Hardie    14 年前

    编辑

    因为太傻了,我忘了检查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() 等等,检查反应的其他方面。