我正在使用import requests
库发出POST请求。它正在为请求添加一些标题,我怀疑它正在失败...
r = requests.post(url, headers = {"Content-Type" : "text/zinc; charset=utf-8"}, \
cookies = {"cookie":cookie}, \
data = data)
以下是r.request.headers
...
CaseInsensitiveDict({
'Accept': '*/*',
'Content-Type': 'text/zinc; charset=utf-8',
'Accept-Encoding': 'gzip, deflate, compress',
'User-Agent': 'python-requests/2.2.1 CPython/3.4.0 Linux/3.13.0-52-generic',
'Cookie': 'cookie=mycookie; fanws="mycookie"'
})
所以问题是,我如何只包含我指定的标题?
答案 0 :(得分:1)
如果您确实想这样做,可以创建PreparedRequest
,然后在发送之前编辑其标题。这不太可能对你有所帮助 - 但是为了让自己相信它不会有所帮助可能是值得的,所以......
而不是:
r = requests.post(url, headers = {"Content-Type" : "text/zinc; charset=utf-8"}, \
cookies = {"cookie":cookie}, \
data = data)
这样做:
sess = requests.Session()
req = requests.Request('GET', url,
headers={"Content-Type": "text/zinc; charset=utf-8"},
cookies={"cookie": cookie},
data=data)
preq = req.prepare()
preq.headers = {key: value for key, value in preq.headers.items()
if key in {'Content-Type', 'Cookie'}}
r = sess.send(preq)
在prepare
中,所有更改都已完成。您显然希望将cookies
转换为Cookie
标题,但您不想保留任何其他更改,因此除了您明确传递的标题之外,我只删除了任何标题和Cookie
。当然,你可以做任何你想做的事情。
答案 1 :(得分:1)
您可以使用会话来破解您通过它发送的所有请求。
import requests
session = requests.Session()
session.headers = {}
response = session.post('http://example.com')
print response.request.headers