PHP用cURL调用RESTful API的关键是正确初始化、配置参数、处理响应和释放资源;须设CURLOPT_RETURNTRANSFER=>true、Content-Type头,检查errno与HTTP状态码,JSON响应需验证后再解码。

PHP用cURL调用第三方RESTful API,关键在于正确初始化、配置请求参数、处理响应和释放资源。核心不是写得多,而是每一步都踩准——尤其容易漏掉CURLOPT_RETURNTRANSFER或Content-Type头,导致返回为空或接口拒绝。
基础GET请求:拿到数据的第一步
适用于公开接口或带简单Token认证的场景:
- 先用
curl_init()创建句柄,别跳过这步 - 必须设置
CURLOPT_RETURNTRANSFER => true,否则curl_exec()不返回内容,直接输出到页面 - 加
CURLOPT_TIMEOUT => 10防卡死,本地调试可设短些(比如5秒) - 若需认证,在
CURLOPT_HTTPHEADER里加'Authorization: Bearer xxx'或'X-API-Key: your-key' - 执行后检查
curl_errno($ch)是否为0,再看HTTP状态码是否为200
POST提交JSON数据:别只传body不设头
很多REST接口要求严格匹配Content-Type: application/json,光用json_encode()不够:
父母的功课——育儿心理学对话支持技能(心虫增强版)。提供结构化对话、情绪识别、场景匹配与安全检测;可选Python脚本(scripts/)在SKILL_DIR/data/本地存储评估历史、洞察与会话状态,不对外传输。核心路径:觉察(看见防御)→接纳(慈悲是……
- 数据先用
json_encode($data)转成字符串,别直接传数组 -
CURLOPT_POST => true或CURLOPT_CUSTOMREQUEST => 'POST'二选一 -
CURLOPT_POSTFIELDS填的是JSON字符串,不是数组 -
CURLOPT_HTTPHEADER必须包含'Content-Type: application/json',否则后端可能解析失败 - 如果接口返回错误,先打印原始
$response,确认是不是JSON格式问题
错误排查:空响应、false、0?先看这三处
不是代码写错,往往是配置缺项:
立即学习“PHP免费学习笔记(深入)”;
-
CURLOPT_RETURNTRANSFER没设true → 返回false或直接输出,无变量接收 - HTTPS请求时
CURLOPT_SSL_VERIFYPEER为true但证书无效 → 开发环境可临时设false,上线必须恢复并配好CA证书 - DNS解析失败或连接超时 → 检查
CURLOPT_CONNECTTIMEOUT是否太小(建议3~5秒),同时确认域名能ping通 - 响应太大被截断 → 确认没误设
CURLOPT_HEADER或CURLOPT_NOBODY - 用
curl_error($ch)和curl_getinfo($ch)组合查具体原因,比猜快得多
响应处理:JSON别硬解,先验再用
返回内容不一定是有效JSON,尤其出错时接口可能返回HTML或纯文本:
- 用
json_decode($response, true)转成关联数组,便于后续取值 - 调用后立刻检查
json_last_error() === JSON_ERROR_NONE,否则用json_last_error_msg()看报什么错 - 如果
$response是空字符串或null,先确认cURL是否执行成功,再查API文档是否要求特定参数或路径 - 敏感字段(如token、密码)别打日志,响应里含用户数据要过滤后再展示


















