You need to enable JavaScript to run this app. 如何使用Python requests库提交同name不同类型的两个表单输入项
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python requests库提交同name不同类型的两个表单输入项

问题根因

你之前的提交方式存在两个问题:

  1. 该表单属于带文件上传的multipart/form-data类型表单,你只传data参数时requests会默认使用application/x-www-form-urlencoded编码,和浏览器的请求编码不一致
  2. 你遗漏了name同为image1的空文件字段,后端无法区分普通字段和文件字段,就把你传入的data/file.jpg路径当成了新上传的文件内容处理。

解决方法

requests支持同时传入data参数存放普通表单字段、files参数存放文件字段,同名字段不会互相覆盖,会按规则拼入最终的multipart请求体中,和浏览器的提交结构完全对齐。

修改后的代码如下:

data = {}
files = {}

form = get_all_forms(url)[1] #函数返回通过requests.get()获取的表单列表,此处选中目标表单
formDetails = get_form_details(form) #使用BeautifulSoup提取所有input的值
for inputTag in formDetails["inputs"]:
  if inputTag["type"] == "file":
    # 三元组格式对应:(文件名, 文件二进制内容, Content-Type),和浏览器提交的空文件结构完全匹配
    files[inputTag["name"]] = ("", b"", "application/octet-stream")
  else:
    data[inputTag["name"]] = inputTag["value"] #设置为当前值

# 同时传入data和files参数,requests会自动使用multipart/form-data编码提交
res = requests.post(url, data=data, files=files)

如果不需要上传新文件,保持上面的空文件配置即可,后端会识别到没有新文件上传,保留你传入的原有路径data/file.jpg对应的图片。

内容的提问来源于stack exchange,提问作者Corsaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 10:54:03