Python 使用pycurl获取reply的头值
我想知道在使用PyCurl发出请求时捕获和访问回复标题信息的一些方法:Python 使用pycurl获取reply的头值,python,pycurl,verbose,Python,Pycurl,Verbose,我想知道在使用PyCurl发出请求时捕获和访问回复标题信息的一些方法: c = pycurl.Curl() c.setopt(c.URL,'MY_URL') c.setopt(c.COOKIEFILE,'cookies') c.setopt(c.COOKIE,'cookies') c.setopt(c.POST,1) c.setopt(c.POSTFIELDS,'MY AUTH VALUES') c.setopt(c.VERBOSE, True) b = StringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL,'MY_URL')
c.setopt(c.COOKIEFILE,'cookies')
c.setopt(c.COOKIE,'cookies')
c.setopt(c.POST,1)
c.setopt(c.POSTFIELDS,'MY AUTH VALUES')
c.setopt(c.VERBOSE, True)
b = StringIO.StringIO()
c.setopt(c.WRITEFUNCTION, b.write)
c.perform()
回复将被格式良好的JSON写入缓冲区b
我希望恢复回复中“Location”头的值
尝试使用curl时,可以在详细输出中看到此值:
[... Curl output ...]
> GET XXXXXXXXX
[... Request ...]
[... Curl output ...]
< HTTP/1.1 302 Found
[... Other headers ...]
< Location: YYYYYYYYYYYYYYY
[... Rest of reply ...]
[…卷曲输出…]
>获取XXXXXXXX
[…请求…]
[…卷曲输出…]
找到
如何从python中恢复
位置
头的值?如果必须使用PyCurl
然后,您可以传递回调函数以获取标题信息:
# code...
# Callback function invoked when header data is ready
def header(buf):
# Print header data to stderr
import sys
sys.stderr.write(buf)
# Returning None implies that all bytes were written
# more code...
c.setopt(pycurl.HEADERFUNCTION, header)
# yet more code...
从中了解更多信息
您也可以使用请求而不是pycurl
虽然这可能不可能,也不能直接回答您的问题,但我建议您使用,而不是pyCurl:
import requests
payload = {"key":"value"}
cookies = {"key":"value"}
r = requests.post('https://my.example.com', data=payload, cookies=cookies)
location = r.headers["Location"]
content = r.text
print(content)
这会让你的生活更轻松。通过了解更多信息本质上是许多自定义函数和注册回调函数。让我们逐段查看curl的详细输出。首先,如果您提供自己的
CURLOPT_OPENSOCKETFUNCTION
,则大部分连接信息都可以填写
接下来,请求头可以是您提前知道的内容,并且可以按您喜欢的方式打印出来。对于进度条,有一个CURLOPT_PROGRESSFUNCTION
,它允许您注册一个回调,以便“大约每秒”更新进度
您还可以注册一个响应头写入函数(CURLOPT_HEADERFUNCTION
),然后使用该函数捕获和/或显示响应头
或者,您可以使用注册回调来获取发送的标题信息、获取响应等。非常感谢:)我能够使用CURLOPT_DEBUGFUNCTION解决问题。等等,当pycurl专门为标题提供回调时,为什么要使用
CURLOPT_DEBUGFUNCTION
,我一直在使用curl的C绑定:-)在python中,我通常也会使用请求,我也不知道为什么会被否决。我可能会建议使用而不是/以及请求
,因为这是一个小得多的更改,但是……除此之外,我看不到任何改进,更不用说投反对票了。从我这里得到肯定+1。(被接受的答案也是如此,不管谁投了反对票。)感谢请求的提示!处理起来容易多了。
import pycurl
import cStringIO
buf = cStringIO.StringIO()
URL = 'http://stackoverflow.com/questions/15641080/get-header-values-of-reply-using-pycurl'
c = pycurl.Curl()
c.setopt(c.URL, URL)
c.setopt(c.NOBODY, 1)
c.setopt(c.HEADERFUNCTION, buf.write)
c.perform()
header = buf.getvalue()
print header