myk*_*hal 21 python libcurl pycurl http-status
花了一些时间研究pycurl和libcurl文档,我仍然找不到(简单)方法,如何在pycurl中获取HTTP状态消息(reason-phrase).
状态代码很简单:
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"
Run Code Online (Sandbox Code Playgroud)
myk*_*hal 28
我自己找到了一个解决方案,它可以满足我的需求,但可以更强大(适用于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"
Run Code Online (Sandbox Code Playgroud)
这是一个旧线程,但我来到这里寻找类似的信息。如果它只是您要查找的状态代码,例如 200、404、500 等,那么只需执行以下操作:
your_curl_handle.getinfo(pycurl.RESPONSE_CODE)
这应该返回一个数字状态代码:)
| 归档时间: |
|
| 查看次数: |
19212 次 |
| 最近记录: |