2015-09-22 7 views
9

現在、Guzzle 6では、API呼び出しの期間を取得するための方法はありません。以下のコードを使用して、通常の呼び出しでこのstatを取得する最も良い方法は何ですか?Guzzle 6を使用してAPI呼び出しの継続時間を取得するにはどうすればいいですか

私は「on_statsの要求オプションGuzzle Docs - Request Options 、あなたのget要求を使用するように変更します、これを実装するにはTransferStats object

にあなたを参照してください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(); 

答えて

3

から次のコードを使用していますリクエストオプション。これは、次のようになります。

// 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は、個々のハンドラ内で生成されて使用され、この時点ではハンドラによってスタックには使用できません。その結果、彼らはスタックに置かれた無条件ミドルウェアの中で消費することはできません。

+0

上記のコードを使用して転送の統計情報を実装する方法はありますか。 – KingKongFrog

+0

あなたの質問を反映するために編集された答え。 –

+0

私はまだハンドラに転送時間をどのように送ることができないので、同じ出力にすることができますか?たとえば、次のようにします。 '新しいMessageFormatter( '{req_body} - {res_body} - {REQUEST_TIME}')' – KingKongFrog

関連する問題