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

使用Requests库POST JSON数组时如何正确进行URL编码

问题原因

  • 你需要的是application/x-www-form-urlencoded格式的POST请求,请求体仅包含一个名为data的表单字段,字段值为目标数组的JSON序列化结果
  • 之前的两种用法均不符合请求格式要求:
    • 直接将JSON字典传给data参数:requests会将字典的键值对拆分为独立表单字段,遇到数组类型的值会遍历展开,因此出现data=item_price_id&data=item_name的错误结果
    • 使用json参数传值:requests会直接将请求体设置为JSON格式,Content-Type自动改为application/json,与要求的表单格式完全不符

正确处理方式

步骤1:导入依赖

import json
import requests

步骤2:准备数组数据并序列化为JSON字符串

注意设置ensure_ascii=False避免希伯来文被转义为\uXXXX格式,保证编码结果符合预期:

payload_array = [
    {
        "item_price_id": "477ABC8E-510F-4412-8F67-B1E2B9EDDC5E",
        "item_name": "כרטיס לסרט בסינמה סיטי למימוש בימי חמישי בלבד",
        "benefit_full_price": 30,
        "benefit_discount_price": 9,
        "benefit_vip_full_price": 0,
        "benefit_vip_discount_price": 0,
        "item_use_credit": 1,
        "user_level_type": 0,
        "member_type_name": "",
        "item_show_id": "3E3FD8CF-3D28-47D7-BEE3-C08AA8474F95",
        "item_hall_id": None,
        "item_hall_name": None,
        "item_show_date": None,
        "item_show_time": None,
        "item_is_limit": 0,
        "item_limit": 0,
        "limit": 100000000000,
        "user_level": 0,
        "user_limit": 0,
        "show_limit": 100000000000,
        "is_user": ""
    }
]
# 序列化为JSON字符串,不转义非ASCII字符
json_str = json.dumps(payload_array, ensure_ascii=False)

步骤3:构造表单字典并发起请求

将JSON字符串作为data字段的值构造表单字典,传给requests的data参数即可:

form_data = {"data": json_str}
response = requests.post("你的目标接口地址", data=form_data)

验证请求内容(可选)

如果需要确认实际发送的请求体是否符合预期,可以通过PreparedRequest查看:

req = requests.Request('POST', '你的目标接口地址', data=form_data)
prepared_req = req.prepare()
# 打印实际发送的请求体,和你预期的编码格式一致
print(prepared_req.body)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:45:03