用curl 提交二进制数据可以,requests无效

laiba17
  • 27
curl代码
curl "http://example.com?id=0&token=token" --header 'Content-Type:video/mp4'  --data-binary "@/video.mp4.part0"

用requests复现这个代码,则无效

import requests

headers = {
    'Content-Type': 'video/mp4',
}

params = (
    ('id', '0'),
    ('token', 'token'),
)

data = open('/video.mp4.part0', 'rb').read()
response = requests.post('http://example.com', headers=headers, params=params, data=data)

我还尝试过其它方法

  1. 在headers里增加application/x-www-form-urlencoded;application/json
  2. 将video.mp4.part0 构造成一个files字典 {"file":open('video.mp4.part0','rb')}
  3. 在requests里,将请求data,变成files等等
  4. 我还试过,将请求参数放到params里,并且urllib.parse.urlencode;然后放到url里 requests.post(url,headers=headers,data=data) #这里的url放的是带参数的

目前还是,CURL可以正常上传;但是requests方式不可以。
请问这是什么原因,用requests的话,要如何重构这个curl请求

回复
阅读 1.4k
1 个回答
风兮清扬
  • 4.9k

我测试 requests.post('http://sxxx', data='字符串数组')可以收到. 不知道你是怎么认为自己没收到的.

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏