命令行curl可正常运行,PHP curl实现遇阻,寻求技术指导
问题分析与修正方案
你的PHP curl代码存在几个关键错误,导致无法正常工作,以下是修正后的代码及错误说明:
修正后的PHP代码
<?php $url = 'http://localhost:11434/api/chat'; $question = $_GET["q"]; $model = 'deepseek-r1:1.5b'; $data = array( "model" => $model, "messages" => array( array( "role" => "user", "content" => $question, ) ), ); $payload = json_encode($data); $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 添加JSON内容类型头,告知服务器请求体格式 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($payload) )); // 捕获curl执行错误 if($result = curl_exec($ch)){ $response = json_decode($result, true); // 数组不能直接echo,转成JSON字符串输出 echo json_encode($response); } else { echo 'Curl错误: ' . curl_error($ch); } curl_close($ch); ?>
错误点说明
- URL格式错误:你把命令行curl的
-d参数加到了URL里,PHP curl的URL只需要接口地址本身,不需要命令行参数。 - 缺少必要请求头:发送JSON格式的POST数据时,必须通过
CURLOPT_HTTPHEADER设置Content-Type: application/json,否则服务器无法识别请求体格式,会解析失败。 - 输出方式错误:
json_decode($result, true)返回的是数组,直接echo $response只会输出Array,需要用json_encode转成JSON字符串才能正确输出响应内容。 - 可选优化:添加curl错误捕获,方便排查请求失败原因;设置
Content-Length头可帮助服务器更高效处理请求。
内容的提问来源于stack exchange,提问作者Dango
相关产品推荐
相关产品推荐

