我有一个PHP脚本,它使用cURL访问也位于我的服务器上的文件(已安装的电子邮件营销程序)。我编写了一个快速脚本来测试我的cURL安装,当它指向我自己服务器上的一个文件时,它就失败了。剧本是:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.mysite.com/test.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
if($contents) {
echo $contents;
} else {
$err = curl_error($ch);
echo $err;
}
curl_close($ch);运行此代码时,它将返回一个错误:无法连接到主机
如果我将网址更改为http://www.google.com或任何其他站点,它就能正常工作。另外,当我试图在另一台服务器上通过cURL打开特定的页面时,它的工作原理是应该的。我从这些测试中得出的假设是,PHP已经安装并且(有点)工作,并且问题不在试图打开的页面中。
我认为这可能是端口问题,所以我尝试使用相同的结果指定端口(而不是连接到主机)。我尝试了curl_setopt和http://www.mysite.com:80/来指定一个我知道是打开的端口。
这让我相信,这个问题在我的apache安装中是有问题的,但我不是apache专家,我整天都在和Google碰头,但都没有用。有什么想法可以导致这样一个特定的cURL失败?
发布于 2011-05-10 11:17:07
尝试在web浏览器中打开http://www.mysite.com/test.php。如果它有效,那么问题在于cURL。如果没有,那么问题要么是您的网络,要么是apache配置。
您可以通过确保apache配置在系统上运行来检查它。然后从命令行尝试telnet <apache server ip> 80。连接之后,尝试执行以下操作:
GET /test.php HTTP/1.1
Host: www.mysite.com
<2 line breaks>如果您收到apache的响应,那么它听起来就像是网络问题。确保mysite.com解析为您的apache服务器的IP地址,端口80流量可以到达您的服务器。这也可能是路由器试图向其自己的ip地址发出请求的回送路由问题(假设您的apache盒位于路由网络连接的后面,与您所在的连接相同)。
发布于 2015-11-11 21:12:37
遇到相同的问题,即我的域名在服务器上无法解决,导致CURL请求本身失败。
我的问题是,由于某些防火墙规则,我的web服务器无法自行解决问题(在web服务器前面有一个负载均衡器,它阻塞了来自服务器的流量)。
换句话说,在我的服务器上运行以下命令
curl -I http://www.mywebserver.com的结果是:
$ curl -I http://www.mywebserver.com curl: (7) couldn't connect to host
更新服务器上的/etc/host文件,将域名映射到本地ip地址,解决了这个问题,并且我的脚本中的fopen和curl再次发挥了作用。
发布于 2011-05-10 11:13:43
你能平www.mysite.com吗?
检查您的/etc/主机..。可能是为www.mysite.com指定了错误的IP。
https://stackoverflow.com/questions/5949084
复制相似问题