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

时间:2012-02-06 17:07:48

标签: php curl

我正在使用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访问外部域的内容?或者还有其他我可能错过的东西?

谢谢, 戴夫

2 个答案:

答案 0 :(得分:0)

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

在抓取谷歌时,您需要使用代理服务器来处理多个请求,如果不是您自己的,则不应滥用您的网络服务器主IP。这可能违反了他们的服务条款,如果被谷歌禁止,可能会导致法律诉讼(可能会发生)。

看看Google rank checker这是一个PHP脚本,它使用CURL和正确的IP管理完全符合您的要求。

我想不出任何导致超时的事情而不是你身边的防火墙。

答案 1 :(得分:0)

我不确定您为什么会收到connect() timeout!错误,但请注意以下几行:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

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