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

PHP Curl返回http_code为0,但浏览器访问返回200的问题排查

解决PHP Curl返回http_code=0但浏览器访问正常的问题

首先,咱们先理清楚:http_code=0通常意味着Curl根本没建立起有效的HTTP连接——要么是请求本身有问题,要么是环境层面的限制。结合你的代码和场景,我给你几个排查和修复的方向:

1. 修复URL里的转义字符问题

你URL里用了&,这是HTML实体的转义符,但在PHP字符串里直接写的话,Curl会把它当作URL的一部分发送,导致服务器无法正确解析参数。把所有&替换成普通的&:

$url = 'http://www.myvaluefirst.com/smpp/sendsms?username=xxxxx&password=xxxx&to=xxxxx&text=Dear&from=STLTD';
curl_setopt($ch, CURLOPT_URL, $url);

这很可能是核心问题——浏览器会自动解析&为&,但Curl不会,所以服务器收到的参数是错的,直接拒绝了连接。

2. 移除CURLOPT_NOBODY选项

你设置了CURLOPT_NOBODY => true,这个选项会强制Curl发送HEAD请求(哪怕你设置了CURLOPT_HTTPGET => true也会被覆盖)。有些短信服务商的API可能不支持HEAD请求,直接返回空连接或者拒绝服务。把这行删掉:

// 删掉这行无效配置
// curl_setopt($ch, CURLOPT_NOBODY, true);

3. 增加错误排查代码

你现在的代码没有捕获Curl的错误信息,也没正确获取http_code,建议加上这些调试代码,方便精准定位问题:

$ch = curl_init();
$url = 'http://www.myvaluefirst.com/smpp/sendsms?username=xxxxx&password=xxxx&to=xxxxx&text=Dear&from=STLTD';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);

$response = curl_exec($ch);
// 检查Curl执行错误
if(curl_errno($ch)) {
    echo 'Curl错误信息: ' . curl_error($ch);
}
// 获取HTTP状态码
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo 'HTTP状态码: ' . $httpCode;
curl_close($ch);

通过curl_error()你能拿到具体的失败原因,比如连接超时、DNS解析失败、端口被拦截等等。

4. 环境层面的排查

如果上面的修复都没用,可能是服务器环境的问题:

  • 检查服务器是否能ping通www.myvaluefirst.com,或者用telnet www.myvaluefirst.com 80测试80端口是否开放
  • 确认服务器的防火墙/SELinux没有阻止Curl发起外部请求
  • 检查PHP的Curl扩展是否正常启用,有没有禁用HTTP协议的配置

按照这个顺序排查,应该能快速解决问题——大概率是URL转义或者CURLOPT_NOBODY的配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:41:34