2009-12-11 4 views
2

나는 파일을 게시하는 API로 작업하고 있습니다. 그러나 응답을 받으면 HTTP 상태 코드는 202입니다. 예상 할 수있는 것 외에 API는 XML 내용으로 응답합니다.응답 코드 202, 공인 오류 코드가 아님

그래서 내 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를 예상하고 응답 내용을 유지하면서도 오류가 발생하지 않도록하려면 어떻게해야합니까?

답변

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() 등을 사용하면 응답의 다른 측면을 검사 할 수 있습니다.

+0

내가 틀렸다면 고쳐주세요.하지만 urllib2.Request 클래스를 HTTPConnection과 함께 사용할 수 없습니다. –

+0

당신은 실제로 맞습니다. 당신이 사용하고있는 Request 클래스에 특별한 것이 있습니까? –

+0

예, 바이트 문자열 또는 더 정확하게 zip 파일. –

관련 문제