蛋疼的一下午,物理机win7旗舰版+APACHE2 ,CURL抓取一直成功。 虚拟机ubuntu+apache2一直抓取失败。
晚上,问个仁兄才知道,CURL可以调试: 参考这位兄台: 地址
curl_errno 和 curl_error 函数,分别返回 HTTP 的错误代码和错误类别。例如: <?php $ch = curl_init('http://www.soso.com/'); curl_exec($ch); if (curl_errno($ch)) { echo 'Curl error: ' . curl_error($ch); } curl_close($ch); ?> 返回: Curl error: couldn't connect to host
我嘞个去,无法连接www.soso.com 是怎么回事,DNS错误找不到IP?ping www.soso.com 也是OK的。 ping的通
$ch = curl_init('http://www.soso.com/'); curl_setopt($ch, CURLINFO_HEADER_OUT, true);//curl_getinfo 函数返回的数组将包含 cURL 请求的 header 信息 curl_setopt($ch, CURLOPT_HEADER , true);//回应的 header 信息 curl_exec($ch); if (curl_errno($ch)) { var_dump(curl_getinfo($ch)); var_dump('Curl error: ' . curl_error($ch)); } curl_close($ch); 依旧是那些看不懂的信息一大堆: array(22) { ["url"]=> string(20) "http://www.soso.com/" ["content_type"]=> NULL ["http_code"]=> int(0) ["header_size"]=> int(0) ["request_size"]=> int(0) ["filetime"]=> int(-1) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(63.127513) ["namelookup_time"]=> float(2.0E-5) ["connect_time"]=> float(0) ["pretransfer_time"]=> float(0) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(-1) ["starttransfer_time"]=> float(0) ["redirect_time"]=> float(0) ["certinfo"]=> array(0) { } ["redirect_url"]=> string(0) "" } string(36) "Curl error: couldn't connect to host"
最后,还是没办法。试一下wget 抓www.soso.com 我怀疑网络很有问题。
大概5分钟后,终于成功抓取到了一次www.soso.com页面。 5分钟啊,C.网络肯定有问题
路由追踪下:
root@ubuntu:~# tracepath www.soso.com
1: 142.54.182.194 0.071ms pmtu 1500 1: 142.54.182.193 0.475ms 1: 142.54.182.193 0.468ms 2: 192.187.107.125 0.311ms 3: 69.30.209.137 0.598ms 4: te0-3-0-4.mpd22.mci01.atlas.cogentco.com 0.625ms 5: be2141.ccr22.dfw01.atlas.cogentco.com 10.982ms 6: be2032.ccr21.dfw03.atlas.cogentco.com 11.210ms 7: 4.68.111.101 21.825ms asymm 11 8: vlan80.csw3.Dallas1.Level3.net 54.881ms asymm 12 9: ae-93-93.ebr3.Dallas1.Level3.net 55.135ms asymm 12 10: ae-3-3.ebr2.LosAngeles1.Level3.net 55.265ms asymm 12 11: ae-72-72.csw2.LosAngeles1.Level3.net 55.357ms 12: ae-4-90.edge6.LosAngeles1.Level3.net 55.118ms asymm 11 13: 59.43.182.89 46.536ms asymm 12 14: 59.43.182.149 53.360ms asymm 11 15: 59.43.182.150 203.715ms asymm 13 16: 59.43.248.254 203.674ms asymm 14 17: 202.55.1.246 204.871ms asymm 14 18: no reply 19: no reply 20: no reply 21: no reply 22: no reply 23: no reply 24: no reply 25: no reply 26: no reply 27: no reply 28: no reply 29: no reply 30: no reply 31: no reply Too many hops: pmtu 1500 Resume: pmtu 1500
拿美国2台服务器跟踪路由试一下, 发现都是一模一样的 . 第18个开始失败, 但是另一台却可以正常CURL,和WGET. 卧槽,奇怪。
下个结论吧,SOSO BAIDU都有抓取频率限制。不过至少比SOGOU好多了,SOGOU根本不允许抓。
SOSO BAIDU抓取频率设置还是很高的,一般一秒抓一个我看都没事。 估计我的服务器IP已经被封了吧。心碎!