PHP CURL 抓取失败 自己调试

蛋疼的一下午,物理机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已经被封了吧。心碎!

 

你可能感兴趣的:(curl)