我正在尝试使用Python脚本进行HTTP POST请求。
在bash中使用curl尝试时,一切正常。但是使用Python,无论是使用requests
还是urllib3
库,我都会从API得到错误响应。POST请求包含头信息和作为json的请求体。
当我使用Wireshark拦截数据包时,发现curl请求(正常工作)是长度为374个字节的单个数据包。而Python请求(requests
和urllib3
没有区别)被分成了两个不同的数据包,长度分别为253和144个字节。
Wireshark可以轻松地重新组装它们,并且它们似乎都包含完整的头信息和POST主体。但是我尝试连接的API会回复“处理请求时出错”,并没有提供太多帮助。
由于253个字节不能是TCP数据包的限制,这种行为的原因是什么?有没有办法解决这个问题?
编辑:
bash:
curl 'http://localhost/test.php' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36' -H 'Content-Type: application/json' -d '{"key1":"value1","key2":"value2","key3":"value3"}'
Python:
import requests, json
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",
"Content-Type": "application/json"}
data = {"key1":"value1", "key2":"value2", "key3":"value3"}
r=requests.post("http://localhost/test.php", headers=headers, data=json.dumps(data))