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

向requests请求payload传递参数失败问题排查

问题分析与解决

你的问题出在动态生成cart参数的JSON字符串时格式不合法,对比手动编写的正确格式,核心问题有两个:

  1. 字符串类型的参数(比如item_url)未添加双引号,导致JSON语法错误
  2. 用str()直接转换字典会生成单引号,不符合JSON要求的双引号规范

错误写法的具体问题

第一种拼接方式生成的cart_value会是:

[{ "id":12345, "quantity":1, "url_id": test_name}]

这里test_name没有引号,属于非法JSON;第二种写法用str(dict)生成的内容是:

'[{'id': 12345, 'quantity': 1, 'url_id': 'test_name'}]'

单引号不符合JSON语法,且外层引号拼接逻辑混乱。

正确解决方法

最稳妥的方式是用json.dumps()将Python对象转为标准JSON字符串,无需手动拼接,自动处理引号和类型兼容:

import json
import random
import string
import requests

def add_to_cart(item_id, item_url):
    # 先构造Python原生的列表+字典结构
    cart_data = [{"id": item_id, "quantity": 1, "url_id": item_url}]
    # 转换为符合规范的JSON字符串
    cart_value = json.dumps(cart_data)

    payload = {
        "email": 'email@mail.com',
        "fname": 'firstName',
        "lname": 'lastName',
        "session_id": ''.join(random.choice(string.digits) for _ in range(10)),
        "cart": cart_value,
    }
    
    response = requests.post("urlHere", headers={
        "User-Agent": userAgent
    }, data=payload)
    
    print(f"add to cart: {response.text}")
    print(f"add to cart: {response.status_code}")

add_to_cart(12345, "test_name")

如果一定要手动拼接字符串,需确保字符串类型参数添加双引号,同时注意数字/字符串类型的兼容:

# 当item_id是数字时的写法
cart_value = f'[{{ "id":{item_id}, "quantity":1, "url_id": "{item_url}" }}]'
# 当item_id是字符串时,要给item_id也加引号
# cart_value = f'[{{ "id":"{item_id}", "quantity":1, "url_id": "{item_url}" }}]'

验证效果

生成的cart_value会和你手动编写的合法格式完全一致:

'[{ "id":12345, "quantity":1, "url_id":"test_name" }]'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:22:34