22

花一些时间研究 pycurl 和 libcurl 文档,我仍然找不到(简单)方法,如何在 pycurl 中获取 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"
4

4 回答 4

31

我自己找到了一个解决方案,它可以满足我的需求,但可能更强大(适用于 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"
于 2010-04-29T11:02:08.420 回答
8

这是一个旧线程,但我来这里是为了寻找类似的信息。如果它只是您要查找的状态码,例如 200、404、500 等,那么只需执行以下操作:

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

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

于 2016-08-20T02:07:16.180 回答
2

我认为您可以使用 human_curl 库来创建简单的代码。

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

您可以在https://github.com/Lispython/human_curl上获得有关 human_curl 的完整文档

于 2012-04-14T08:40:05.937 回答
-1

试试 BaseHTTPServer.BaseHTTPRequestHandler.responses,它应该包含一个错误代码字典,如本页所述。

希望这可以帮助。

于 2010-04-28T09:48:57.283 回答