下面是一个小数据集,我试图回答两个问题:
基本代码如下所示:
$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项目在哪里适合此图表?
答案 0 :(得分:2)
我认为没有办法准确计算出你想要的东西。
cURL连接到代理,发送请求并等待响应。代理在时间上做的所有事情(它自己的DNS解析,连接到主机,发送(代理)请求,等待回复,阅读回复,并将其代理回来是cURL的黑盒子。
无法知道这些步骤中的任何一个单独来自HTTP / SOCKS代理的时间。
您唯一可以准确知道的是所有这些行动的总和(CURLINFO_TOTAL_TIME - CURLINFO_STARTTRANSFER_TIME
)。我想甚至有可能从代理完成请求到cURL返回第一个字节(可能是缓存?)时会有一点延迟。
我不太确定的另一种可能性(可能取决于代理配置和API发送的响应头)是代理实际发回数据的时候。它可能需要下载整个HTTP响应,或者它可能在读取时开始发送标头和数据。这可能会导致计算中出现一些潜在的显着差异。
最终,我认为底线是因为您没有来自代理的连接详细信息,无法知道或准确地估计与API的代理连接所花费的时间,以及获取响应所需的时间。否则,你是正确的,如果你使用代理,TOTAL - STARTTRANSFER是响应时间的最佳近似值。
在不确切知道您要做什么或为什么做的情况下,也许您最好的选择是在不同的地理位置租用一些VPS或云实例来运行一些PHP实例,使用cURL直接连接到API,这样您就可以访问您正在寻找的所有指标。