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

CentOS 7下PHP5 CLI结合Curl调用REST API遇Content-Length异常

排查GLPI REST API Curl请求异常的方案

先把你提供的请求输出整理出来,方便后续分析:

[+] API GLPI : Session Initializing
User Token ===> YsYJnd81WFiFIJ0pqdW6GqiujUpfkH12tdlgYElj
Init Url ===> http://192.168.158.129:8080/apirest.php/initSession/
* About to connect() to 192.168.158.129 port 8080 (#0)
* Trying 192.168.158.129...
* Connected to 192.168.158.129 (192.168.158.1...

从输出能看出来,Curl已经成功和服务器建立了TCP连接,但请求没继续往下走,下面给你几个针对性的排查方向:

1. 补全PHP Curl的请求配置,获取完整调试信息

PHP5的Curl模块发送JSON POST请求时,很容易因为头信息或数据格式缺失导致请求中断。你可以给脚本加上这些配置,拿到更详细的错误日志:

$url = 'http://192.168.158.129:8080/apirest.php/initSession/';
$token = 'YsYJnd81WFiFIJ0pqdW6GqiujUpfkH12tdlgYElj';

$ch = curl_init($url);
// 必须设置JSON请求头和令牌授权头
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Authorization: user_token ' . $token
));
// 开启POST请求,确保数据是合法JSON格式
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([])); // 这里如果需要传参,替换成对应数组
// 强制返回结果到变量,不直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 开启详细调试模式
curl_setopt($ch, CURLOPT_VERBOSE, true);
// 把调试日志写入临时流
$verboseLog = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_STDERR, $verboseLog);

$response = curl_exec($ch);

// 输出调试日志
rewind($verboseLog);
echo "详细调试日志:\n" . stream_get_contents($verboseLog);

// 检查Curl是否抛出错误
if(curl_errno($ch)) {
    echo "\nCurl错误: " . curl_error($ch);
}
curl_close($ch);

运行这个脚本后,就能看到请求中断的具体原因,比如是服务器返回了错误码,还是请求格式不被接受。

2. 验证GLPI服务器的API状态和权限

  • 先直接访问http://192.168.158.129:8080/apirest.php,如果能返回GLPI API的基础信息(比如版本号),说明API入口是正常的;
  • 检查你的用户令牌是否有效:登录GLPI后台,找到对应用户的API令牌,确认没有过期或被禁用;
  • 查看GLPI的日志文件(一般在glpi/files/_log/目录下),里面会记录API请求的错误详情,比如权限不足、令牌无效等。

3. 用系统Curl命令直接测试,排除PHP脚本问题

在CentOS7的命令行里直接执行下面的命令,看能不能成功获取会话:

curl -X POST -H "Content-Type: application/json" -H "Authorization: user_token YsYJnd81WFiFIJ0pqdW6GqiujUpfkH12tdlgYElj" http://192.168.158.129:8080/apirest.php/initSession/

如果命令行能成功返回会话数据,那问题肯定出在PHP脚本的Curl配置上;如果命令行也失败,那就要排查网络连通性(比如防火墙是否拦截8080端口)或者GLPI的API配置。

4. 检查PHP5的Curl扩展状态

  • 执行php -m | grep curl,确认Curl扩展已经启用;
  • 查看php.ini文件,确保没有禁用Curl的相关功能(比如curl.cainfo,不过你用的是HTTP,这个暂时可以忽略)。

内容的提问来源于stack exchange,提问作者S. Di Cioccio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:07:31