
curl_getinfo() 返回 1 通常是因为未启用 CURLOPT_RETURNTRANSFER,导致 curl_exec() 返回 true(即整数 1)而非响应内容,进而使后续的 cURL 句柄状态异常或信息不可靠。
`curl_getinfo()` 返回 1 通常是因为未启用 `curlopt_returntransfer`,导致 `curl_exec()` 返回 `true`(即整数 1)而非响应内容,进而使后续的 curl 句柄状态异常或信息不可靠。
在使用 PHP cURL 发起 HTTP 请求时,curl_exec() 的返回值行为取决于 CURLOPT_RETURNTRANSFER 选项的设置:
- ✅ 启用时(true):curl_exec() 返回响应体字符串(如 JSON、HTML),cURL 句柄保持有效,curl_getinfo() 可正常获取状态码、重定向次数等元信息;
- ❌ 未启用时(默认 false):curl_exec() 直接输出响应到标准输出(类似 echo),并返回布尔值 true(即整型 1)——这正是你看到 var_dump($http_status, "Code") 中 $http_status 为 1 的根本原因。
你的代码中缺失了关键配置:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // ← 必须添加!
✅ 修正后的完整示例:
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
$ch = curl_init($end_point);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request_body);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 关键:启用返回值捕获
curl_setopt($ch, CURLOPT_HEADER, false); // 可选:避免响应头混入 body
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 可选:支持重定向
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 可选:防止无限等待
$result = curl_exec($ch);
// 检查执行是否成功(注意:即使 HTTP 状态码为 4xx/5xx,curl_exec 也可能返回非 false)
if ($result === false) {
throw new RuntimeException('cURL error: ' . curl_error($ch));
}
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
var_dump($http_status, 'HTTP Status Code'); // 此时将正确输出如 int(200)
// 后续可安全使用其他 info 字段
$redirect_count = curl_getinfo($ch, CURLINFO_REDIRECT_COUNT);
$content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
curl_close($ch);
⚠️ 注意事项:
- curl_getinfo() 必须在 curl_exec() 之后、curl_close() 之前调用;
- 若 curl_exec() 返回 false(执行失败),curl_getinfo() 的部分字段(如 CURLINFO_HTTP_CODE)可能不可靠或返回 0;
- 始终检查 curl_exec() 返回值是否为 false,再处理业务逻辑与状态信息;
- 开发阶段建议开启 CURLINFO_HEADER_OUT 并结合 curl_getinfo($ch, CURLINFO_HEADER_OUT) 调试请求头是否符合预期。
掌握这一配置差异,能显著提升 cURL 调试效率与代码健壮性。










