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

Python POST请求传递CSV转dict数据报too many values to unpack错误

错误含义

你遇到的Error: too many values to unpack (expected 2)错误,是requests库在处理data参数时抛出的:当data参数收到非字符串、非字节类型的可迭代对象时,会默认将其当做表单键值对集合处理,要求每一个迭代元素都是长度为2的(键, 值)结构。你传入的payload是包含多台主机配置的字典列表,每个字典元素拆包时的长度和预期的2不符,因此触发该错误。

代码存在的问题
  1. 你已经指定了请求头Content-Type: application/json,但没有将Python原生的列表对象序列化为JSON字符串,直接传入了data参数
  2. 中间遍历csv_data的for循环完全冗余,重复赋值后覆盖了之前已经正确序列化的csvJson_data变量,最终payload是未序列化的Python列表
  3. 需确认目标add-host接口是否支持批量添加主机:如果接口单次仅允许添加一台主机,直接传入20台主机的列表就算格式正确也会报错
修复方案

情况1:接口支持批量添加主机

直接将payload序列化为JSON字符串后传入data参数,或者直接使用requests内置的json参数(自动完成序列化、自动添加application/json请求头),参考修改后的代码:

import requests, json, csv
# 前面登录、发布的代码保持不变
data = open("C:/Users/OdedinaP/Python_Learning/Add-Multi-Host/add_mutli_host.csv")
csv_reader = csv.DictReader(data)
csv_data = list(csv_reader)[0:20]

headers = {
    'X-chkp-sid': session_id
}
url = "https://192.168.15.4/web_api/v1.6.1/add-host"
# 直接用json参数传Python对象,requests自动处理序列化
response = requests.request("POST", url, headers=headers, json=csv_data, verify=False)
print(response.text)

情况2:接口仅支持单次添加一台主机

遍历每一行CSV数据单独发起请求:

import requests, json, csv
# 前面登录、发布的代码保持不变
data = open("C:/Users/OdedinaP/Python_Learning/Add-Multi-Host/add_mutli_host.csv")
csv_reader = csv.DictReader(data)
csv_data = list(csv_reader)[0:20]

headers = {
    'X-chkp-sid': session_id
}
url = "https://192.168.15.4/web_api/v1.6.1/add-host"
for row in csv_data:
    response = requests.request("POST", url, headers=headers, json=row, verify=False)
    print(response.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:54:04