查看: 591|回复: 0

[PHP实例] PHP curl 返回Connection timed out解决办法

发表于 2017-9-30 10:24:59
尚学堂AD
背景

请求业务方B接口时,返回了报错信息
My NOTICE [请求接口失败信息]
请求接口URL:http://xxxx.com/xx/xx
请求接口时间:30.026
请求接口返回状态:200
请求接口错误信息:connect() timed out!
请求接口错误码:28
请求接口发送的参数:Array

判断原因

本地模拟请求,如果是写一个不存在的域名xx.com,会报错

  1. Could not resolve host:
复制代码

随手写了一个ip地址,报错就成了

  1. Connection timed out after 2000 milliseconds
复制代码
解决办法

由于无法判断谁来背锅,而且正式环境无法复现。只能采取重试的方法。
简单逻辑如下

  1. <?php
  2. $ch = curl_init();
  3. // curl_setopt ($ch, CURLOPT_URL, 'produc_redis.php.com');
  4. curl_setopt ($ch, CURLOPT_URL, '11.11.11.1');
  5. // I changed UA here
  6. 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');
  7. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
  8. curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 2);
  9. curl_setopt ($ch, CURLOPT_AUTOREFERER, true);
  10. curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
  11. curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 2);
  12. $html = curl_exec($ch);
  13. var_dump($html,curl_error($ch));
  14. $num=3;
  15. for($i=1;$i<=$num;$i++){
  16. if(curl_getinfo($ch,CURLINFO_HTTP_CODE)=='0' && $i<=$num){
  17. echo "retry $i 次".PHP_EOL;
  18. if($i==3){
  19. curl_setopt ($ch, CURLOPT_URL, '220.181.57.217');
  20. }
  21. $html = curl_exec($ch);
  22. }
  23. }
  24. var_dump($html);
  25. var_dump(curl_error($ch));
  26. // var_dump(curl_getinfo($ch));
复制代码
执行结果
  1. bool(false)
  2. string(44) "Connection timed out after 2000 milliseconds"
  3. retry 1 次
  4. retry 2 次
  5. retry 3 次
  6. string(81) "<html>
  7. <meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
  8. </html>
  9. "
  10. string(0) ""
  11. [Finished in 6.1s]
复制代码

鸟哥关于curl的研究



回复

使用道具 举报