gpt4 book ai didi

php - 使用 Guzzle 6 获取 API 调用持续时间的最佳方法是什么

转载 作者:可可西里 更新时间:2023-10-31 22:50:24 24 4
gpt4 key购买 nike

目前对于 Guzzle 6,似乎没有开箱即用的方法来获取 API 调用的持续时间。使用以下代码通过任何普通调用获取此统计信息的最佳方式是什么。

我正在使用来自 How do you log all API calls using Guzzle 6 的以下代码

use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;
use GuzzleHttp\MessageFormatter;
use Monolog\Logger;

$stack = HandlerStack::create();
$stack->push(
Middleware::log(
new Logger('Logger'),
new MessageFormatter('{req_body} - {res_body}')
)
);
$client = new \GuzzleHttp\Client(
[
'base_uri' => 'http://httpbin.org',
'handler' => $stack,
]
);

echo (string) $client->get('ip')->getBody();

最佳答案

我建议您引用“on_stats”请求选项 Guzzle Docs - Request OptionsTransferStats object

要实现这一点,您需要修改您的获取请求以使用请求选项。它将类似于以下内容:

// get($uri, $options) proxies to request($method, $uri, $options)
// request($method, $uri, $options) proxies to requestAsync($method, $uri, $options)
// and sets the $options[RequestOptions::SYNCHRONOUS] to true
// and then waits for promises to resolve returning a Psr7\http-message\ResponseInterface instance

$response = $client->get($uri, [
'on_stats' => function (TransferStats $stats) use ($logger) {
// do something inside the callable.
echo $stats->getTransferTime() . "\n";
$logger->debug('Request' . $stats->getRequest() .
'Response' . $stat->getResponse() .
'Tx Time' . $stat->getTransferTime()
);
},
]);
echo $response->getBody();

**注意:我确信有一些方法可以确保日志的格式更好,但是,这是作为概念证明。

TransferStats 是在各个处理程序中生成和使用的,此时处理程序对堆栈不可用。因此,它们不可用于放置在堆栈上的单个中间件中。

关于php - 使用 Guzzle 6 获取 API 调用持续时间的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32727640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com