curl超时阻塞问题

问题描述

最近写了一个脚本,定时curl访问某一个接口,但是发现在执行一段时间后就卡住不在执行了

左思右想,最终发现栽在curl超时时间上,CURLOPT_TIMEOUT默认值是0(无限等待),表现出来就是卡死

1
2
3
4
5
6
7
8
9
10
...
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2); //尝试连接时的超时时间
curl_setopt($ch, CURLOPT_TIMEOUT, 2); //执行时的超时时间
...
if(curl_errno($ch)){
echo 'Curl error: '.curl_error($ch).PHP_EOL;
}
curl_close($ch);

加上超时时间后,问题解决。加上后可以看到错误输出确实有大量超时错误

Curl error: Connection timed out after 2001 milliseconds
Notice: Undefined offset: 1 in /home/projects/php/beizhu.php on line 142
Curl error: Operation timed out after 2002 milliseconds with 0 bytes received