我正在使用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访问外部域的内容?或者还有其他我可能错过的东西?
谢谢, 戴夫
答案 0 :(得分:0)
我不知道这样的设置,这没有多大意义
正如你所说,你在一个没有控制台访问权限的远程网络服务器上,我猜你的活动已被主机检测到,或者更可能是它引起了问题,因此他们对你进行了防火墙扫描。
一个无声的iptables DROP会导致这种情况。
在抓取谷歌时,您需要使用代理服务器来处理多个请求,如果不是您自己的,则不应滥用您的网络服务器主IP。这可能违反了他们的服务条款,如果被谷歌禁止,可能会导致法律诉讼(可能会发生)。
看看Google rank checker这是一个PHP脚本,它使用CURL和正确的IP管理完全符合您的要求。
我想不出任何导致超时的事情而不是你身边的防火墙。
答案 1 :(得分:0)
我不确定您为什么会收到connect() timeout!
错误,但请注意以下几行:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
如果未设置为1,则不会将任何页面内容返回到$contents
。