我使用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
中。