curl_exec($ch)不再在外部域上执行,为什么


curl_exec($ch) not executing on external domains anymore, why?

我使用cURL从网站上抓取内容,最近我的页面在到达curl_exec($ch)时表示挂起。经过一些测试,我注意到它可以从我自己的域加载任何其他页面,但当试图从任何外部加载时,我会收到connect() timeout!错误。

以下是我使用的简化版本:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://www.google.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
$contents = curl_exec ($ch);
curl_close ($ch);
echo $contents;
?>

以下是我从phpinfo():中获得的关于主机的一些信息

PHP Version 5.3.1
cURL support       enabled
cURL Information    7.19.7
Host    i686-pc-linux-gnu 

我没有访问SSH或修改php.ini文件的权限(但是我可以读取它)。但是,有没有办法判断最近是否设置了阻止cURL访问外部域的功能?或者我可能还错过了什么?

谢谢,Dave

我不知道有这样的设置,这没有多大意义
正如你所说,你在一个没有控制台访问权限的远程Web服务器上,我想你的活动已经被主机检测到,或者更可能是它导致了问题,所以他们对你进行了防火墙
静默的iptables DROP会导致这种情况。

当抓取谷歌时,你需要对多个满手的请求使用代理,如果不是你自己的,你永远不应该滥用你的网络服务器的主IP。这很可能违反了他们的TOS,如果他们被谷歌禁止,甚至可能导致法律诉讼(这是可能发生的)。

看看谷歌排名检查器,这是一个PHP脚本,它使用CURL和适当的IP管理来做你想要的事情。

我想不出有什么比你这边的防火墙更能导致超时的了。

我不确定为什么会出现connect() timeout!错误,但下面一行:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

如果未设置为1,则不会将页面的任何内容返回到$contents中。