使用pycurl获取回复的头部值
我想知道在使用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.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 ...]
我该如何从Python中获取Location
头的值呢?
3 个回答
当然可以!请看下面的内容:
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则满足时,程序才会继续运行。
比如说,如果你想让程序在用户输入“你好”时,显示“你好,世界!”,那么你就需要写一个条件判断的语句。这个语句会检查用户输入的内容,如果是“你好”,那么就执行显示“你好,世界!”的操作。
这样的条件判断可以帮助我们控制程序的行为,让它更加智能和灵活。
希望这个解释能帮助你更好地理解编程中的条件判断!
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
如果你必须使用 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...
想了解更多,可以查看文档。
你也可以用 requests 代替 pycurl
虽然这可能不太可行,也没有直接回答你的问题,但我建议你使用requests 库,而不是 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
来注册回调函数,以获取你发送的头信息、收到的响应等信息。