使用pycurl获取回复的标头值

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中恢复标头的值?

bri*_*ice 5

如果你必须使用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)

它会让你的生活更轻松.通过阅读文档了解更多信息