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

如何将curl POST请求转为Python requests POST?解决val1未定义报错

解决requests POST请求参数传递错误的问题

嘿,你踩了个很常见的小坑——把POST请求体的参数和URL查询参数搞混了!咱们一步步理清楚问题出在哪,再给你正确的写法:

原curl命令的逻辑拆解

先看看你原来的curl命令到底在做什么:

  • -d '{"val1": ...}' 是把JSON数据放在**POST请求的请求体(body)**里发送给服务器
  • http://some-site:6000?t=1234567890 里的t=1234567890是URL上的查询参数

而你写的Python代码里,把val1这些本该放在请求体的参数全塞到params里了——这会让requests把它们拼到URL后面,服务器自然找不到请求体里的val1,所以才返回"val1 is not defined"的错误。

正确的Python代码写法

用requests的json参数传递请求体数据,把URL查询参数单独放在params里就好:

import requests

# 基础URL(不带查询参数)
url = "http://some-site:6000"
# URL查询参数只有t这一项
query_params = {"t": 1234567890}
# POST请求体的JSON数据(如果val1等是变量,直接替换成对应变量名即可)
payload = {
    "val1": -1000,
    "val2": 15,
    "val3": "20000",
    "val4": "22"
}

# 发送请求:params传URL参数,json传请求体数据
r = requests.post(url, params=query_params, json=payload)

# 可以验证一下:URL只会带?t=1234567890,请求体是正确的JSON
print(r.url)
print(r.request.body)

补充说明

  • 使用json=payload时,requests会自动帮你设置Content-Type: application/json请求头,不用手动添加
  • 如果你非要用data参数传递,需要先把payload转成JSON字符串,同时手动设置headers,写法如下(但显然用json参数更省心):
    import json
    
    headers = {"Content-Type": "application/json"}
    r = requests.post(url, params=query_params, data=json.dumps(payload), headers=headers)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:29:58