如何获取(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"
答
我认为你可以使用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)
它应该会返回一个数字状态代码:)
这是可能的解决方案..我应该指出,我希望从服务器获得状态消息,这可能与标准的 – mykhal 2010-04-29 10:52:43