PHP CURL发送JSON请求疑问:为何仅转义字符串可适配API的updateRecord数组
解决PHP cURL POST JSON请求的规范写法
嘿,我完全懂你手动写转义JSON字符串的痛苦——不仅容易写错,后期维护也麻烦!其实用PHP自带的函数就能轻松搞定,不用再手动转义引号,下面是规范的实现步骤:
步骤1:构造PHP数组
先把要发送的数据用普通的PHP关联数组来表示,这样可读性强,修改也方便:
// 构造请求数据的PHP数组 $postData = [ 'updateRecord' => [ [ 'fielda' => '77777', 'fieldb' => '11.77', 'fieldc' => '你的字段值' // 替换成实际内容 ] // 如果需要多条记录,直接添加新的关联数组即可 ] ];
步骤2:转换为JSON字符串
用json_encode()函数把PHP数组转换成标准的JSON字符串,这个函数会自动处理所有需要转义的字符,比手动写可靠多了:
$jsonData = json_encode($postData); // 可选:如果转换失败,可以排查错误 if ($jsonData === false) { die('JSON转换错误: ' . json_last_error_msg()); }
步骤3:配置cURL并发送请求
重点是要设置正确的请求头,告诉服务器你发送的是JSON格式的数据,然后把转换好的JSON字符串传给CURLOPT_POSTFIELDS:
$ch = curl_init(); // 基础配置 curl_setopt($ch, CURLOPT_URL, "http://url.com/update"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 获取返回结果而不是直接输出 // 关键:设置JSON请求头 curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($jsonData) // 部分API需要这个头来验证请求长度 ]); // 传入JSON格式的请求体 curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); // 执行请求并处理结果 $response = curl_exec($ch); if (curl_errno($ch)) { echo 'CURL请求错误: ' . curl_error($ch); } curl_close($ch); // 查看响应结果 var_dump($response);
为什么之前的转义字符串能成功?
你之前手动写的转义字符串本质是合法的JSON格式,所以API能识别。但如果直接把PHP数组传给CURLOPT_POSTFIELDS,cURL默认会把它转换成application/x-www-form-urlencoded格式(类似表单提交的键值对),而你的API期望的是JSON格式的请求体,所以就会失败。
用上面的方法,既不用手动转义,又能保证请求格式符合API要求,后期修改数据也更方便~
内容的提问来源于stack exchange,提问作者Brian Powell
相关产品推荐
相关产品推荐

