2010-04-27 3 views
18

pycurl과 libcurl 문서를 공부하면서 시간을 보내고 있습니다. pycurl에서 HTTP 상태 메시지 (이유 구문)를 얻는 방법을 찾을 수 없습니다.(py) 컬에서 HTTP 상태 메시지를받는 방법?

상태 코드는 간단합니다 : this page에 설명 된대로

import pycurl 
import cStringIO 

curl = pycurl.Curl() 
buff = cStringIO.StringIO() 
curl.setopt(pycurl.URL, 'http://example.org') 
curl.setopt(pycurl.WRITEFUNCTION, buff.write) 
curl.perform() 

print "status code: %s" % curl.getinfo(pycurl.HTTP_CODE) 
# -> 200 

# print "status message: %s" % ??? 
# -> "OK" 

답변

23

나는 해결책을 스스로 찾았는데, 필요한 것이지만 더 강력 할 수 있습니다 (HTTP의 경우).

이것은 캡처 한 헤더가 pycurl.HEADERFUNCTION 인 경우 상태 표시 줄이 있다는 사실을 기반으로합니다.

import pycurl 
import cStringIO 
import re 

curl = pycurl.Curl() 

buff = cStringIO.StringIO() 
hdr = cStringIO.StringIO() 

curl.setopt(pycurl.URL, 'http://example.org') 
curl.setopt(pycurl.WRITEFUNCTION, buff.write) 
curl.setopt(pycurl.HEADERFUNCTION, hdr.write) 
curl.perform() 

print "status code: %s" % curl.getinfo(pycurl.HTTP_CODE) 
# -> 200 

status_line = hdr.getvalue().splitlines()[0] 
m = re.match(r'HTTP\/\S*\s*\d+\s*(.*?)\s*$', status_line) 
if m: 
    status_message = m.groups(1) 
else: 
    status_message = '' 

print "status message: %s" % status_message 
# -> "OK" 
0

하는 BaseHTTPServer.BaseHTTPRequestHandler.responses을 시도, 그것은 에러 코드의 사전도 포함되어야합니다.

희망이 도움이됩니다.

+0

가능성이있어 반환해야

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

솔루션 .. 나는 표준화 된 것보다 다를 수도있는 서버로부터의 상태 메시지를 갖고 싶습니다. – mykhal

2

나는 human_curl 라이브러리를 사용하여 코드를 간단하게 만들 수 있다고 생각합니다. 당신이 https://github.com/Lispython/human_curl

+0

"reason-phrase"는 인간을 지칭하기 위해 HTTP 프로토콜 문서가 사용하는 용어입니다 status_code 다음에 오는 읽을 수있는 문자열. 이 예제는 수치 상태 코드를 반환합니다. –

1

에 얻을 수 human_curl에

>>> import human_curl as hurl 
>>> r = hurl.get('http://example.org') 
>>> print r.status_code 
200 

대한 문서가이 오래된 스레드하지만 난 여기에 유사한 정보를 찾고있어. 당신이 찾고있는 바로 상태 코드, 등 (200), (404)의 경우, 500 등은 단지 수행 숫자 상태 코드 :

관련 문제