You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python发送含重复同名参数的POST请求问题求助

Let's break down where you went wrong and fix this step by step!

问题根源

  1. 错误使用集合:你一开始写的{'RESULT' , 'Value01'}是Python的集合(set),它是无序且不保证键值对应关系的,所以会出现键值颠倒、格式混乱的问题,这根本不是Requests能识别的表单数据结构。
  2. 字典列表不被支持:当你改成字典列表[{'RESULT': 'Value01'}, ...]时,Requests的内部解析逻辑会出错。requests.post的data参数如果接收列表,它期望的是元组的列表(每个元组是(key, value)),而不是字典列表。迭代字典只会得到key值,导致Requests试图把单个字符串解包成k, vs,最终抛出ValueError: need more than 1 value to unpack。

核心解决方案:用元组列表传递重复键

要发送不带[]的重复字段名,不能用字典(字典的key必须唯一,重复key会被覆盖),必须用元组的列表来定义表单数据。每个元组对应一个key=value对,这样重复的key会被完整保留并正确编码。

修正后的完整代码

import re
import requests

sourceDataList = [
 '2017-12-20 08:59:17;Value01\r\n',
 '2017-12-20 08:59:18;Value02\r\n',
 '2017-12-20 08:59:20;Value03\r\n',
 '2017-12-20 08:59:21;Value04\r\n'
]

# 构建元组列表:每个元素是(字段名, 处理后的值)
dataList = []
for line in sourceDataList:
    # 提取并清洗值:分割字符串、去除空格、保留字母数字
    cleaned_value = re.sub('[^A-Za-z0-9]+', '', line.split(';')[1].strip())
    dataList.append(('RESULT', cleaned_value))

# 发送POST请求
target_url = "你的远程服务器URL"
response = requests.post(target_url, data=dataList)

# 可选:验证编码后的表单格式是否符合要求
from requests.models import PreparedRequest
req = PreparedRequest()
req.prepare_body(dataList, None, None)
print(req.body)
# 输出示例:RESULT=Value01&RESULT=Value02&RESULT=Value03&RESULT=Value04

额外说明

  • 元组列表是Requests官方推荐的处理重复键表单的方式,它会被编码成服务器需要的key=value&key=value格式,完全不需要加[]。
  • 如果你用字典传递重复键,最后只会保留最后一个键值对,因为字典不允许重复key存在,这也是为什么你之前的尝试都失败的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:55:09