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
相关产品推荐
相关产品推荐

