CURLOPT_TIMEOUT和CURLOPT_CONNECTTIMEOUT的区别

前言

PHP的cURL函数中,有两个超时选项设置,CURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUT,这篇文章简单说下这两个设置的区别。

区别

CURLOPT_CONNECTTIMEOUT:连接对方主机时的最长等待时间,此设置限制的是建立连接过程的时间,其它过程的时间不在控制范围

CURLOPT_TIMEOUT:整个cURL函数执行过程的最长等待时间,也就是说,这个时间是包含连接等待时间的

因此,两者是包含和被包含关系,CURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUT的其中一部分,当两者都有设置的时候,CURLOPT_TIMEOUT的值应比CURLOPT_CONNECTTIMEOUT大。

验证

我们使用一段代码来验证

<?php
// 使用谷歌官网的81端口来模拟连接超时
$url = 'https://www.google.com:81';

// 第一种情况:仅设置CURLOPT_TIMEOUT
$options = [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => false,
    CURLOPT_TIMEOUT => 3,
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$content = curl_exec($ch);
$time = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
curl_close($ch);
echo $time; // 输出 2.958352

// 第二种情况:仅设置CURLOPT_CONNECTTIMEOUT
$options = [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => false,
    CURLOPT_CONNECTTIMEOUT => 1,
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$content = curl_exec($ch);
$time = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
curl_close($ch);
echo $time; // 输出 0.989237

// 第三种情况:同时设置CURLOPT_TIMEOUT和CURLOPT_CONNECTTIMEOUT
$options = [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => false,
    CURLOPT_CONNECTTIMEOUT => 1,
    CURLOPT_TIMEOUT => 3,
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$content = curl_exec($ch);
$time = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
curl_close($ch);
echo $time; // 输出 0.990142

通过代码验证,结果也符合前面说的结论。

文章参考

https://stackoverflow.com/questions/27776129/php-curl-curlopt-connecttimeout-vs-curlopt-timeout

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值