cURL连接()超时

4

最近几个月,我的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):

ping www.viewmag.com
PING www.viewmag.com (205.178.145.65) 56(84) bytes of data.

盒子 2 (Windows):

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.

我的 cURL 如下:

$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?提前致谢。


1
服务器中的某些设置已更改,阻止了您进行cUrl操作。尝试伪装成已知的用户代理并检查。 - raidenace
你能在浏览器中看到 http://www.viewmag.com 吗? - hek2mgl
@raidenance:那是毫无意义的。UA字符串直到建立TCP连接后才会发送。如果它在过滤UA,则ping将返回结果。该网站很可能因为滥用抓取而将OP列入黑名单/防火墙。 - Marc B
CURLOPT_USERAGENT,'cURL 爬虫' 真的吗? :D - Kamil
1
此时我会假设我已经被列入黑名单,但我只想澄清一下,我的curl脚本每周只拉取两个简单的HTML页面(这与滥用网络爬虫的想法相去甚远)。无论如何,感谢大家的反馈。 - veerman
显示剩余5条评论
2个回答

7
  1. 也许你的服务器IP被该网站禁止了?

  2. 也许尝试设置更长的超时时间?我去访问那个网站,它运行得非常缓慢,你可能需要超过5秒钟的时间。


后来添加:

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

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

<?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; 

?>

并且它可以在我的测试服务器上运行(数据中心位于德国)。


我一直在尝试使用超时但是没有成功(同时,我的浏览器响应非常快)。现在,我认为我的服务器IP可能被禁止了,这很奇怪,因为我每周只运行一次我的脚本并获取两个HTML页面。 - veerman
1
@veerman,也许尝试更改用户代理会有所帮助。将代理设置为“cURL爬虫”就像在寻求禁止一样 :) - Kamil
感谢您抽出时间为我进行测试,非常感激。 - veerman

1
很可能他们在服务器上增加了安全性。服务器中的某些设置已更改以阻止您进行cUrl操作。尝试伪装成已知用户代理。ping可能无法正常工作,因为他们刚刚关闭了ping服务器,以防止分布式拒绝服务(DDOS)等攻击。不幸的是,此时无法确定什么确切的组合可以或将使其正常工作。您需要采用试错方法。

这也是我的猜测,我尝试了几个UA,并且现在假设它们都阻止所有ping流量。 - veerman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接