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

CLI curl转PHP Curl请求无响应,HTTP状态码为0求排查方案

问题解决思路

核心差异:SSL证书验证

你的CLI curl命令使用了-k参数(跳过SSL证书验证),但PHP curl默认会强制验证SSL证书,这是导致请求失败、返回HTTP状态码0的最可能原因。

修改后的PHP代码

<?php
$myserver = "myserver.mydomain.com";
$myuser = "myuser";
$mypass = "mypass";
$mydomain = "mydomain";

$ch = curl_init();
$postFields = json_encode([
    "username" => $myuser,
    "password" => $mypass,
    "domain" => $mydomain
]);

curl_setopt($ch, CURLOPT_URL, "https://" . $myserver . "/rest/login");
// 匹配CLI的-k参数,关闭SSL证书验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// 统一Content-Type格式(与CLI保持一致,添加空格)
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 启用 verbose 日志,方便排查深层问题
curl_setopt($ch, CURLOPT_VERBOSE, true);
$verboseLogHandle = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_STDERR, $verboseLogHandle);

$webresponse = curl_exec($ch);
$info = curl_getinfo($ch);

// 输出 verbose 日志内容
rewind($verboseLogHandle);
$verboseContent = stream_get_contents($verboseLogHandle);
echo "Verbose 日志:\n" . $verboseContent . "\n";

print_r($webresponse);
print_r($info);

curl_close($ch);
fclose($verboseLogHandle);
?>

额外排查步骤

  • 检查$myserver变量的完整性:确保它包含.mydomain.com后缀,否则拼接后的URL会与CLI命令的目标地址不一致。
  • 确认$myuser、$mypass、$mydomain变量已正确赋值,无空值或特殊字符转义异常。
  • 调用curl_error($ch)和curl_errno($ch)获取直接错误信息,排查DNS解析、端口连通性等底层问题。
  • 检查目标服务器的防火墙/安全组规则,确认PHP所在服务器的IP被允许访问目标接口。

内容的提问来源于stack exchange,提问作者AckItsMe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:40:53