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

Python如何将字典(dict)作为查询参数发起POST请求?

问题原因
  • URL查询参数(对应requests的params参数)、表单格式请求体(对应requests的data参数)都不支持直接传递嵌套字典类型,所有值都会被序列化为字符串,服务端收到的randomObject是字符串格式,不符合接口要求的对象类型,因此触发报错。
  • 你原代码中将参数字典直接传给requests.post的第二个位置参数,相当于提交表单格式数据,同样无法传递嵌套对象。
修复方案

方案1:使用JSON格式请求体(推荐,POST请求常用传参方式)

绝大多数POST接口都会要求参数放在JSON格式的请求体中,直接使用requests的json参数即可自动完成序列化,服务端可以正常识别嵌套对象类型。

import requests

def do_random_request(self, random_dictionary: dict, random_number: int, random_name: str):
  url = "https://api.random-site.com/"
  payload = {
    "randomObject": random_dictionary,
    "randomNumber": random_number,
    "randomName": random_name,
  }

  try:
    # 使用json参数提交JSON格式请求体
    response = requests.post(url, json=payload)
    response.raise_for_status() # 可额外捕获HTTP错误状态码
    data = response.json()
  except Exception as e:
    print(e)
  else:
   return data

方案2:参数必须放在URL查询串时的处理

如果接口明确要求所有参数都放在URL查询串中,你需要先手动把字典序列化为JSON字符串,再传给params参数,同时需要确认服务端会对该字段做JSON解析。

import requests
import json

def do_random_request(self, random_dictionary: dict, random_number: int, random_name: str):
  url = "https://api.random-site.com/"
  params = {
    # 先把字典序列化为JSON字符串
    "randomObject": json.dumps(random_dictionary),
    "randomNumber": random_number,
    "randomName": random_name,
  }

  try:
    response = requests.post(url, params=params)
    response.raise_for_status()
    data = response.json()
  except Exception as e:
    print(e)
  else:
   return data

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:30:02