加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何使用CURLINFO _ * _ TIME值来估算cURL请求的代理连接时间?

发布时间:2020-12-13 19:21:47 所属栏目:Linux 来源:网络整理
导读:下面是一个小数据集,我试图回答两个问题: 代理连接到API服务器需要多长时间? API请求需要多长时间才能返回? 基本代码如下所示: $c = curl_init(); // assume all options set correctly$time = microtime(true);$response = curl_exec($c);$curl_info =
下面是一个小数据集,我试图回答两个问题:

>代理连接到API服务器需要多长时间?
> API请求需要多长时间才能返回?

基本代码如下所示:

$c             = curl_init();           // assume all options set correctly
$time          = microtime(true);
$response      = curl_exec($c);
$curl_info     = curl_getinfo($c);      // Returns each `*_TIME` field
$response_time = microtime(true)-$time; // Returns total PHP execution time

从上面我建立了这个:

id  response_time   NAMELOOKUP_TIME CONNECT_TIME    APPCONNECT_TIME PRETRANSFER_TIME    STARTTRANSFER_TIME  REDIRECT_TIME   TOTAL_TIME
1   0.250691        0.000191        0.025070        NULL            0.181040            0.250239            0.000000        0.250306
2   0.958577        0.000129        0.022764        NULL            0.136846            0.664099            0.000000        0.957881
3   0.578614        0.000053        0.021111        NULL            0.127998            0.440123            0.000000        0.577812

代理与api请求花费了多少时间用于上述每一项?

cURL Documentation很有帮助,但我不确定如何使用文档中的相关部分回答上述问题:

TOTAL_TIME           Total time of previous transfer.
NAMELOOKUP_TIME      Time from start until name resolving completed.
CONNECT_TIME         Time from start until remote host or proxy completed.
APPCONNECT_TIME      Time from start until SSL/SSH handshake completed.
PRETRANSFER_TIME     Time from start until just before the transfer begins.
STARTTRANSFER_TIME   Time from start until just when the first byte is received.
REDIRECT_TIME        Time taken for all redirect steps before the final transfer.

包含的图表有助于了解这些时间如何叠加:

|
|--NAMELOOKUP
|--|--CONNECT
|--|--|--APPCONNECT
|--|--|--|--PRETRANSFER
|--|--|--|--|--STARTTRANSFER
|--|--|--|--|--|--TOTAL
|--|--|--|--|--|--REDIRECT

但我仍然不确定将代理连接时间归因于哪个.这是与我的评论相同的图表:

|
|--NAMELOOKUP                 // DNS,clearly not proxy. Also insignificant values.
|--|--CONNECT                 // Does this count toward Proxy Time?
|--|--|--APPCONNECT           // Not set (likely due to non-https transaction)
|--|--|--|--PRETRANSFER       // Does this count toward Proxy Time?
|--|--|--|--|--STARTTRANSFER  // Stop proxy time? So Proxy Time = STARTTRANSFER?
|--|--|--|--|--|--TOTAL       // Would TOTAL-STARTRANSFER = API Request Time?
|--|--|--|--|--|--REDIRECT    // Always 0 (???)

这是HTTP代理如何工作的chart.以上CURLINFO _ * _ TIME项目在哪里适合此图表?

解决方法

我认为没有办法准确计算出你想要的东西.

cURL连接到代理,发送请求并等待响应.代理执行时间的所有操作(它自己的DNS解析,连接到主机,发送(代理)请求,等待回复,读取回复,并将其代理回来是cURL的黑盒子.

无法知道这些步骤中的任何一个单独从HTTP / SOCKS代理中单独使用多长时间.

您唯一可以准确知道的是所有这些操作的总和(CURLINFO_TOTAL_TIME – CURLINFO_STARTTRANSFER_TIME).我想甚至有可能从代理完成请求到cURL返回第一个字节(可能缓存?)时会有一点延迟.

我不太确定的另一种可能性(可能取决于代理配置和API发送的响应头)是代理实际发回数据的时候.它可能需要下载整个HTTP响应,或者它可能在读取时开始发送标头和数据.这可能会导致计算中出现一些潜在的显着差异.

最后,我认为底线是因为您没有来自代理的连接详细信息,无法知道或准确地估计与API的代理连接所花费的时间,以及获取响应所需的时间.否则,您是正确的,如果您使用代理,则TOTAL – STARTTRANSFER是响应时间的最佳近似值.

在不确切知道您要做什么或为什么做的情况下,也许您最好的选择是在不同的地理位置租用一些VPS或云实例来运行一些PHP实例,使用cURL直接连接到API,这样您就可以访问所有您正在寻找的指标.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读