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

如何将PHP curl_setopt_array转换为Python代码并修复参数错误

问题根因

你的Python代码和可运行的PHP代码存在几个关键的行为差异,导致接口校验失败:

  • 第一次尝试直接传data=data:requests会自动将字典编码为key=value&key2=value格式的表单数据,而PHP实际发送的是原始JSON字符串作为请求体,格式完全不匹配。
  • 第二次尝试把参数放到请求头中:接口从POST请求体读取参数,无法从头中获取到有效参数。
  • 第三次尝试用json=data传参:这个参数会让requests自动将数据序列化为JSON,同时自动添加Content-Type: application/json请求头,但PHP代码从未设置过这个头,使用的是curl默认的application/x-www-form-urlencoded头,该接口对Content-Type存在不规范的强校验,头不匹配就直接返回参数错误。
  • 其他细节差异:PHP代码强制指定了HTTP 1.1协议、允许跟随重定向、自动适配压缩编码,这些配置如果不对齐也可能触发异常。
可直接运行的等效Python代码

完全对齐PHP curl的所有行为:

import requests
import json

# 构造请求参数,和PHP代码完全一致
req_data = {
    'api_key': 'APIKEY',
    'sender': '6285157853022',
    'number': '082136815088',
    'message': 'the message'
}

target_url = "http://wa.mydomain.id/wa/app/api/send-message"

# 手动序列化JSON,对齐PHP json_encode的输出格式:无多余空格、不强制转义非ASCII字符
json_payload = json.dumps(req_data, separators=(',', ':'), ensure_ascii=False)

# 请求头对齐PHP curl默认值:不声明JSON类型,使用默认表单类型头
req_headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
}

# 对齐所有curl配置项
response = requests.post(
    target_url,
    data=json_payload,  # 直接传序列化后的JSON字符串,不使用json参数
    headers=req_headers,
    allow_redirects=True,  # 对齐CURLOPT_FOLLOWLOCATION=true
    timeout=None,  # 对齐CURLOPT_TIMEOUT=0(永不超时)
)

print(response.text)
排查说明

如果运行后依然报错,可以打印Python实际发出的原始请求内容,和PHP侧抓取的请求逐字段对比:

# 打印实际发送的请求头
print("请求头:", response.request.headers)
# 打印实际发送的请求体
print("请求体:", response.request.body)

只要保证请求头、请求体、请求方法和PHP发出的完全一致,就能得到和PHP代码相同的成功响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:06:19