Python使用错误的方法请求会话发送

时间:2017-11-12 09:07:06

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

由于请求添加了不需要的标头,我决定手动准备请求并使用Session Send()。

可悲的是,以下代码产生了错误的请求

import requests

ARCHIVE_URL = "http://10.0.0.10/post/tmp/archive.zip"

headers = {
 'Content-Type': 'application/x-www-form-urlencoded',
 'Cache-Control': 'no-cache',
 'Connection': 'Keep-Alive',
 'Host': '10.0.0.10'
}

DataToSend = 'data'

req = requests.Request('POST', ARCHIVE_URL, data=DataToSend, headers=headers)
prepped = req.prepare()
s = requests.Session()
response = s.send(prepped)

如果我使用fiddler查看请求,我会得到:

GET http://10.0.0.10/tmp/archive.zip HTTP/1.1
Accept-Encoding: identity
Connection: Keep-Alive
Host: 10.0.0.10
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

我错过了什么?

1 个答案:

答案 0 :(得分:0)

由于在s是会话时使用req.prepare()而不是s.prepare_request(req)时,准备好的请求未连接到会话,因此必须指定请求标头,因为没有默认值来自会话对象的一个​​。

使用s.prepare_request(req)代替req.prepare()或指定标题字典