Python发送含重复同名参数的POST请求问题求助
Let's break down where you went wrong and fix this step by step!
问题根源
- 错误使用集合:你一开始写的
{'RESULT' , 'Value01'}是Python的集合(set),它是无序且不保证键值对应关系的,所以会出现键值颠倒、格式混乱的问题,这根本不是Requests能识别的表单数据结构。 - 字典列表不被支持:当你改成字典列表
[{'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
相关产品推荐
相关产品推荐

