 1.文档阅读
PHP cURL: CURLOPT_CONNECTTIMEOUT vs CURLOPT_TIMEOUT - Stack Overflow
https://altafphp.blogspot.com/2012/12/difference-between-curloptconnecttimeou.html
Timeouts - Everything curl -- 推荐阅读
Connections - Everything curl
curl/unit1303.c at d7d0c9d9538df7f78b83cc91da8ec96c7d160f6a · curl/curl · GitHub
PHP: curl_setopt - Manual
CURL设置超时时间_漫天丶飞雪的博客-CSDN博客_curl超时时间设置
网络/Network - TCP与HTTP - 学习/实践_穿素白衫的少年的博客-CSDN博客
2.整理输出 2.1 知识点
PHP cURL: CURLOPT_CONNECTTIMEOUT vs CURLOPT_TIMEOUT - Stack Overflow
中文翻译:
CURLOPT_CONNECTTIMEOUT 是允许与服务器建立连接的最长时间(以秒为单位)。可以将其设置为 0 以禁用此限制,但这在生产环境中是不可取的。
CURLOPT_TIMEOUT 是以秒为单位的最大时间量,单个 cURL 扩展函数调用的执行将受到限制。请注意,此设置的值应包括 CURLOPT_CONNECTTIMEOUT 的值。
也就是说,CURLOPT_CONNECTTIMEOUT是CURLOPT_TIMEOUT所代表的时间段,所以CURLOPT_TIMEOUT的值应该大于CURLOPT_CONNECTTIMEOUT的值。
同时补充:
根据源代码连接设置:如果两者都设置,则使用最严格的。但仅在连接阶段。
/* if a timeout is set, use the most restrictive one */
if(data->set.timeout > 0) timeout_set |= 1; if(duringconnect && (data->set.connecttimeout > 0)) timeout_set |= 2;
switch(timeout_set) { //... case 3: if(data->set.timeout < data->set.connecttimeout) timeout_ms = data->set.timeout; else timeout_ms = data->set.connecttimeout; break;
个人补充:
这个连接就是TCP连接,三次握手,建立TCP连接。
传输过程就是request/response过程
看看HTTP请求的整个过程就知道了。

验证查看 2.2 PHP中使用
2.2 PHP中使用/实践 cRUL在PHP中是可同步阻塞也可以异步非阻塞的,区别是在设置超时时间。
CURLOPT_TIMEOUT | 允许 cURL 函数执行的最长秒数。 | | CURLOPT_TIMEOUT_MS | 设置cURL允许执行的最长毫秒数。 如果 libcurl 编译时使用系统标准的名称解析器( standard system name resolver),那部分的连接仍旧使用以秒计的超时解决方案,最小超时时间还是一秒钟。 | 在 cURL 7.16.2 中被加入。从 PHP 5.2.3 起可使用。 |
CURLOPT_CONNECTTIMEOUT | 在尝试连接时等待的秒数。设置为0,则无限等待。 | | CURLOPT_CONNECTTIMEOUT_MS | 尝试连接等待的时间,以毫秒为单位。设置为0,则无限等待。 如果 libcurl 编译时使用系统标准的名称解析器( standard system name resolver),那部分的连接仍旧使用以秒计的超时解决方案,最小超时时间还是一秒钟。 | 在 cURL 7.16.2 中被加入。从 PHP 5.2.3 开始可用。 |
默认值?TBD PHP: Default cURL timeout value - Stack Overflow  代码实践:
中文翻译:
CURLOPT_CONNECTTIMEOUT 是仅连接到服务器的时间。
CURLOPT_TIMEOUT 是整个连接时间加上交换数据的时间。
因此,CURLOPT_TIMEOUT 始终包含 CURLOPT_CONNECTTIMEOUT。
验证使用 CURLINFO_CONNECT_TIME 和 CURLINFO_TOTAL_TIME 是否非常容易。
curl_getinfo($ch, CURLINFO_CONNECT_TIME) 获取信息
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $yourMaxConnTime) 设置连接的最大值。
curl_getinfo($ch, CURLINFO_TOTAL_TIME) 获取信息
curl_setopt($ch, CURLOPT_TIMEOUT, $yourMaxTotTime) 设置整个操作的最大值。
当然,$yourMaxTotTime 必须始终高于 $yourMaxConnTime。
所有这些值都以秒为单位。
代码: TBD 后续补充 ... |