在请求POST请求中省略标头

时间:2015-05-18 20:24:57

标签: python python-3.x python-requests

我正在使用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"'
})

所以问题是,我如何只包含我指定的标题?

2 个答案:

答案 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