【发布时间】:2019-09-07 06:38:28
【问题描述】:
我有一个 GuzzleClientLoggingHandler 如下:
class GuzzleClientLoggingHandler
{
/** @var HandlerStack */
private $handlerStack;
public function __construct(HandlerStack $handlerStack)
{
$this->handlerStack = $handlerStack;
}
public function log(): HandlerStack
{
$logger = Logger::getLogger(__CLASS__);
$middleware = Middleware::log($logger, $this->request());
$this->handlerStack->unshift($middleware);
$middleware = Middleware::log($logger, $this->response());
$this->handlerStack->unshift($middleware);
return $this->handlerStack;
}
}
我的客户看起来像:
new Client([
'base_uri' => 'https://example.com',
'handler' => (new GuzzleClientLoggingHandler($handlerStack))->log()
]);
和变量$handlerStack有n个中间件,例如:
$handlerStack->unshift(new LanguageMiddleware());
在中间件 LanguageMiddleware 中我为每个请求设置了一个标头
public function __invoke(callable $handler)
{
return function (RequestInterface $request, array $options) use ($handler) {
$request = modify_request($request, [
'set_headers' => [
'Accept-Language' => Session::get('language')
]
]);
return $handler($request, $options);
};
}
还有一个问题:如何使用更改/设置的标头记录此请求? 现在中间件中的所有请求修改都不会出现在日志中。
【问题讨论】: