由于请求添加了不需要的标头,我决定手动准备请求并使用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
我错过了什么?
答案 0 :(得分:0)
由于在s是会话时使用req.prepare()而不是s.prepare_request(req)时,准备好的请求未连接到会话,因此必须指定请求标头,因为没有默认值来自会话对象的一个。
使用s.prepare_request(req)代替req.prepare()或指定标题字典