Php cURL connect()超时

Php cURL connect()超时,php,curl,ping,Php,Curl,Ping,在过去的几个月里,我成功地运行了cURL实现,没有任何问题;然而,上周我突然发现一个特定的网站(www.viewmag.com)出现了问题。我可以在浏览器中完美地访问该站点(并将其解析),但cURL返回以下内容: * About to connect() to www.viewmag.com port 80 (#0) * Trying 205.178.145.65... * Timeout * connect() timed out! * Closing connection #0 为了理

在过去的几个月里,我成功地运行了cURL实现,没有任何问题;然而,上周我突然发现一个特定的网站(www.viewmag.com)出现了问题。我可以在浏览器中完美地访问该站点(并将其解析),但cURL返回以下内容:

* About to connect() to www.viewmag.com port 80 (#0)
*   Trying 205.178.145.65... * Timeout
* connect() timed out!
* Closing connection #0
为了理智起见,我尝试用两个不同的框ping网站,但每次ping都超时了

方框1(Linux):

方框2(窗口):

我的卷曲如下:

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://www.viewmag.com');
curl_setopt ($ch, CURLOPT_USERAGENT, 'cURL crawler');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt ($ch, CURLOPT_AUTOREFERER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 2);
$html = curl_exec($ch);

有没有人想过为什么cURL会失败,为什么我可以在浏览器中访问这个站点,但不能ping/cURL它?提前感谢

很可能他们已经提高了服务器的安全性。服务器中的某些设置已更改,以阻止您对其进行卷曲。尝试伪装为已知用户代理。ping可能不起作用,因为他们刚刚关闭了ping服务器,因此可以阻止分布式拒绝服务(DDOS)等攻击。不幸的是,在这一点上,无法确定什么样的确切组合可以或将使其工作。你需要反复试验

  • 也许你的服务器IP在那个网站上被禁止了

  • 也许尝试设置更长的超时时间?我访问了那个网站,它运行得很慢,你可能需要5秒钟以上


  • 稍后添加:

    看起来您的服务器IP被禁止。

    我尝试过这个(它是您代码的副本,更改在注释中):

    
    

    它在我的测试服务器(德国的数据中心)上工作。

    服务器中的某些设置已更改,以阻止您对其进行卷曲。尝试伪装成一个已知的用户代理,然后检查您是否可以看到
    http://www.viewmag.com
    在浏览器中?1。网站关闭了。2.他们封锁了你。您可能太频繁地删除他们的站点,并且您可能没有请求许可这样做。@raidance:这是毫无意义的。UA字符串在tcp连接建立后才会发送。如果它在UAs上进行过滤,那么ping将返回resultts。该网站很可能被列入黑名单/防火墙,这是滥用刮削的OP。在这一点上,我假设我已经被列入黑名单,但我只想澄清一下,我的curl脚本每周拉两个简单的html页面(这是我心目中最远离滥用刮削的事情)。无论如何,感谢大家的反馈。我一直在玩超时游戏,但没有成功(我的浏览器的响应也很快)。此时,我想我的服务器IP可能会被禁止,这很奇怪,因为我实际上每周运行一次脚本并抓取两个html页面。@veerman,所以可能尝试更改用户代理。将代理设置为“cURL crawler”就像请求ban:)感谢您花时间为我测试,非常感谢。这也是我的猜测,我尝试了几个UAs,现在假设它们阻止了所有ping流量。
    ping www.viewmag.com
    
    Pinging www.viewmag.com [205.178.145.65] with 32 bytes of data:
    Request timed out.
    Request timed out.
    Request timed out.
    Request timed out.
    
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, 'http://www.viewmag.com');
    curl_setopt ($ch, CURLOPT_USERAGENT, 'cURL crawler');
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt ($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 2);
    $html = curl_exec($ch);
    
    <?php
    
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, 'http://www.viewmag.com');
    
    // I changed UA here
    curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
    
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt ($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 2);
    $html = curl_exec($ch);
    
    // I added this 
    echo $html; 
    
    ?>