如何获取(py)curl中的HTTP状态消息?

问题描述:

花了一些时间研究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" 

我自己找到了一个解决方案,它可以满足我的需求,但可以更强大(适用于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" 

尝试BaseHTTPServer.BaseHTTPRequestHandler.responses,它应该包含一个错误代码dictionnary为this page解释。

希望这有助于。

+0

这是可能的解决方案..我应该指出,我希望从服务器获得状态消息,这可能与标准的 – mykhal 2010-04-29 10:52:43

我认为你可以使用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

得到完整文档这是一个古老的线程,但我来到这里寻找类似的信息。如果只是你正在寻找的状态代码,如200,404,500等,然后就去做:

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

它应该会返回一个数字状态代码:)