2010-04-27 76 views
18

花了一些時間研究pycurl和libcurl文檔,我仍然無法找到一個(簡單)方法,如何在pycurl中獲取HTTP狀態消息(原因短語)。如何獲取(py)curl中的HTTP狀態消息?

狀態代碼很簡單:

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,它應該包含一個錯誤代碼dictionnary爲this page解釋。

希望這有助於。

+0

這是可能的解決方案..我應該指出,我希望從服務器獲得狀態消息,這可能與標準的 – mykhal 2010-04-29 10:52:43

2

我認爲你可以使用human_curl庫來創建你簡單的代碼。

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

上human_curl你可以https://github.com/Lispython/human_curl

+0

不同,它是HTTP協議文檔用來指代人的術語可讀的字符串在status_code之後。這個例子只是返回數字狀態碼。 – 2017-03-17 18:26:16

1

得到完整文檔這是一個古老的線程,但我來到這裏尋找類似的信息。如果只是你正在尋找的狀態代碼,如200,404,500等,然後就去做:

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

它應該會返回一個數字狀態代碼:)