Mik*_*ikA 2 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.setopt(c.WRITEFUNCTION, b.write)
c.perform()
Run Code Online (Sandbox Code Playgroud)
回复将是格式良好的JSON写入缓冲区b.
我希望在回复中恢复"Location"标题的值.
尝试使用curl时,可以在详细输出中看到此值:
[... Curl output ...]
> GET XXXXXXXXX
[... Request ...]
[... Curl output ...]
< HTTP/1.1 302 Found
[... Other headers ...]
< Location: YYYYYYYYYYYYYYY
[... Rest of reply ...]
Run Code Online (Sandbox Code Playgroud)
如何Location从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...
Run Code Online (Sandbox Code Playgroud)
从文档中了解更多信息.
您也可以使用请求而不是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)
Run Code Online (Sandbox Code Playgroud)
它会让你的生活更轻松.通过阅读文档了解更多信息