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

PHP使用CURL发POST JSON请求时CURLOPT_POSTFIELDS变量化报错如何解决

正确PHP CURL提交POST JSON请求实现方案

完整可运行代码

<?php
// 1. 构造请求参数数组
$postData = [
    'parameters' => [
        // body为索引数组,存储多条对象数据,避免重复键覆盖
        'body' => [
            [
                'type' => 'text',
                'content' => '第一条消息内容'
            ],
            [
                'type' => 'image',
                'url' => 'https://example.com/img.jpg'
            ]
            // 更多body条目直接追加到该数组即可
        ],
        // 按接口要求补充其他parameters字段
        'app_key' => '你的应用密钥',
        'request_id' => uniqid()
    ]
    // 按接口要求补充其他顶层请求字段
];

// 2. 初始化CURL并配置
$ch = curl_init('https://chat-service.com/api/direct');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    // 直接传入JSON编码后的字符串,禁止使用http_build_query
    CURLOPT_POSTFIELDS => json_encode($postData, JSON_UNESCAPED_UNICODE),
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        // 按需补充其他请求头,如鉴权头
        'Token: 你的接口鉴权token'
    ],
    // 本地调试如需跳过SSL校验可取消注释下两行,生产环境请删除
    // CURLOPT_SSL_VERIFYPEER => false,
    // CURLOPT_SSL_VERIFYHOST => false
]);

// 3. 执行请求并处理结果
$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'CURL错误:' . curl_error($ch);
}
curl_close($ch);

// 输出返回结果
var_dump($response);
?>

常见错误修正说明

  • 重复body键覆盖问题:接口要求parameters.body为对象数组结构,不要多次对$postData['parameters']['body']做赋值操作,所有body内容需作为元素存入该索引数组,json_encode后会自动转为符合要求的JSON数组格式。
  • 错误使用http_build_query问题:http_build_query仅用于生成表单格式(application/x-www-form-urlencoded)的参数,提交JSON数据时无需使用该方法,直接将PHP数组做JSON编码后传入即可,同时必须配置Content-Type: application/json请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:15:04