我有一个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已经安装并且(有点)工作,并且问题不在试图打开的页面中。
我认为这可能是一个端口问题,所以我尝试使用相同的结果指定端口(不连接到主机)。我尝试了curl_setopt
和http://www.mysite.com:80/
来指定我知道要打开的端口。
这让我相信这个问题在我的apache安装中有所帮助,但我不是阿帕奇专家,而且我一整天都在猛烈抨击谷歌而无济于事。什么可能导致这种特定cURL失败的想法?
答案 0 :(得分:2)
遇到同样的问题,我的域名无法在服务器上解析,导致CURL
请求自身失败。
我的问题是由于某些防火墙规则,我的Web服务器无法自行解析(Web服务器前面有一个负载平衡器阻止来自服务器的流量)。
换句话说,在我的服务器上运行以下命令
curl -I http://www.mywebserver.com
导致:
$ curl -I http://www.mywebserver.com
curl: (7) couldn't connect to host
更新服务器上的/ etc / hosts文件以将域名映射到本地IP地址解决了该问题,我的脚本中的fopen
和curl
再次正常运行。
答案 1 :(得分:1)
你可以ping www.mysite.com
吗?
检查您的/ etc / hosts ...可能为www.mysite.com
指定了错误的IP。
答案 2 :(得分:0)
尝试在网络浏览器中打开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框位于路由网络连接后面,与您所在的连接相同)。
答案 3 :(得分:0)
我也在远程网络服务器上遇到了这个问题。在这台机器上运行curl我无法在同一台机器上访问由apache服务器托管的文件。奇怪的是我可以通过
访问文件curl -O http://example.com/file1.txt
但
curl -0 http://sub.example.com/file1.txt
没用。
我通过将缺少的DNS记录添加到计算机上运行的DNS服务器来解决它。好像nslookup
等似乎先问一下本地DNS服务器,然后再问别人。并且当本地DNS服务器回复“无法找到”curl
时放弃了。