Python requests复现curl的form-data请求返回400错误如何解决
问题原因
原代码构造的data表单项值和curl提交的内容不匹配:额外多转义了一层引号、JSON末尾多了冗余空格,后端无法正确解析参数,因此返回400错误。
目标curl命令中--form 'data="{\"searchId\":66966,\"mapAllTeam\":true}"'实际提交的data字段值为外层包裹双引号的标准JSON字符串,无多余字符。
正确实现代码
import requests uri = "https://my_api.com/request/dynamic_views" cookies = {"session": "123"} # 构造multipart表单普通字段,元组第一个元素为None表示非文件上传字段 form_fields = { "data": (None, '{"searchId":66966,"mapAllTeam":true}') } resp = requests.post(uri, cookies=cookies, files=form_fields) print(resp.status_code, resp.text)
关键修改点
- multipart表单的非文件字段,通过
(None, 字段值)的元组格式传入files参数即可,requests会自动按multipart/form-data格式编码,不需要额外做转义处理 - 严格对齐curl提交的字段值,去掉多余的转义引号、JSON结构里的冗余空格,避免后端校验不通过
- Cookie传参优先使用requests自带的
cookies参数,不需要手动拼接Cookie请求头,减少格式错误概率 - 只要传入
files参数,requests会自动设置正确的Content-Type请求头,不需要手动指定
内容的提问来源于stack exchange,提问作者Jankes
相关产品推荐
相关产品推荐

