cURL 报 Connection refused 是因端口变更后 URL 未显式指定新端口且 Apache 的 Listen 配置未同步更新:必须将 curl 请求 URL 改为 http://localhost:8080/ 形式,并确保 httpd.conf 中仅保留 Listen 8080、注释掉 Listen 80,同时检查 hosts 文件优先解析 IPv4 的 127.0.0.1 localhost。

改了 XAMPP 的 Apache 端口(比如从 80 改成 8080),cURL 调用本地接口却报 Connection refused,不是代码问题,是端口绑定和 URL 书写不匹配。
curl 请求的 URL 必须显式带上新端口
Apache 改端口后,http://localhost/ 仍默认走 80,不会自动跳转或 fallback。你得手动把所有 cURL 请求里的 URL 补全端口号:
- 错:
curl_init('http://localhost/api/test.php')→ 仍连 80,失败 - 对:
curl_init('http://localhost:8080/api/test.php')→ 显式指定,成功 - 如果用了
$_SERVER['HTTP_HOST']拼 URL,也要检查它是否含端口(通常不含),别直接拼
Apache Listen 配置必须同步更新
只改 httpd.conf 里的 ServerName 不够,Listen 指令必须和实际端口一致,否则 Apache 根本不监听那个端口:
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
- 打开
C:\xampp\apache\conf\httpd.conf - 确认有且仅有一行
Listen 8080(或你设的其他端口) - 删掉或注释掉旧的
Listen 80,避免冲突 - 重启 Apache,用
netstat -ano | findstr :8080确认进程已绑定
Windows hosts 文件干扰 localhost 解析
即使端口改了,localhost 如果因 IPv6 解析延迟或失败,cURL 可能卡在 DNS 阶段,最终超时或报 Connection refused:
- 用管理员权限打开
C:\Windows\System32\drivers\etc\hosts - 注释掉
::1 localhost这一行(前面加#) - 确保
127.0.0.1 localhost这行存在且未被注释 - 命令行运行
ping localhost,应立刻返回 IPv4 地址、毫秒级延迟 - 这步不做,
cURL在某些 Windows 版本下会先尝试 IPv6,失败后再 fallback,中间耗时导致连接被拒假象
PHP cURL 扩展本身没启用或 SSL 验证失败
端口改完后如果还报错,别只盯 URL 和 Apache,检查 PHP 层基础能力是否就绪:
- 确认
php.ini中extension=php_curl.dll已取消注释 - 重启 Apache 后,运行
phpinfo()页面搜索cURL,看是否显示 enabled - 若请求 HTTPS 接口(哪怕本地自签),需加两行绕过验证(仅开发环境):
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); - 生产环境必须配好 CA 证书路径,用
CURLOPT_CAINFO指向 crt 文件
最容易忽略的是:改了端口却忘了改代码里硬编码的 URL,或者 Listen 没同步更新——这两处一漏,cURL 就永远连不到任何东西,连错误信息都可能是误导性的。

















