在 guzzle 6 中初始化后设置请求选项
Set request options after initialisation in guzzle 6
在 Guzzle 版本 < 6 中,我曾经在客户端初始化后即时设置身份验证 header。为此,我使用了 setDefaultOption()
。
$client = new Client(['base_url' => $url]);
$client->setDefaultOption('auth', [$username, $password]);
然而,此功能似乎在版本 6 中已弃用。我该如何处理?
注意:我需要这样做的原因是因为我使用 guzzle 进行批处理请求,其中一些请求需要不同的身份验证参数。
您可以在构造客户端或发送请求时发送'auth'参数。
$client = new Client(['base_url' => $url, 'auth' => ['username', 'password', 'digest']]);
或
$client->get('/get', ['auth' => ['username', 'password', 'digest']]);
另一种方法是重写 requestAsync 方法并在其中添加您的自定义逻辑。但是没有理由。
Guzzle 6+ 的最佳选择是重新创建客户端。 Guzzle 的 HTTP 客户端现在是不可变的,因此每当您想更改某些内容时,您都应该创建一个新对象。
这并不意味着您必须重新创建整个对象图,HandlerStack 和中间件可以保持不变:
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
$stack = HandlerStack::create();
$stack->push(Middleware::retry(/* ... */));
$stack->push(Middleware::log(/* ... */));
$client = new Client([
'handler' => $stack,
'base_url' => $url,
]);
// ...
$newClient = new Client([
'handler' => $stack,
'base_url' => $url,
'auth' => [$username, $password]
]);
在 Guzzle 版本 < 6 中,我曾经在客户端初始化后即时设置身份验证 header。为此,我使用了 setDefaultOption()
。
$client = new Client(['base_url' => $url]);
$client->setDefaultOption('auth', [$username, $password]);
然而,此功能似乎在版本 6 中已弃用。我该如何处理?
注意:我需要这样做的原因是因为我使用 guzzle 进行批处理请求,其中一些请求需要不同的身份验证参数。
您可以在构造客户端或发送请求时发送'auth'参数。
$client = new Client(['base_url' => $url, 'auth' => ['username', 'password', 'digest']]);
或
$client->get('/get', ['auth' => ['username', 'password', 'digest']]);
另一种方法是重写 requestAsync 方法并在其中添加您的自定义逻辑。但是没有理由。
Guzzle 6+ 的最佳选择是重新创建客户端。 Guzzle 的 HTTP 客户端现在是不可变的,因此每当您想更改某些内容时,您都应该创建一个新对象。
这并不意味着您必须重新创建整个对象图,HandlerStack 和中间件可以保持不变:
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
$stack = HandlerStack::create();
$stack->push(Middleware::retry(/* ... */));
$stack->push(Middleware::log(/* ... */));
$client = new Client([
'handler' => $stack,
'base_url' => $url,
]);
// ...
$newClient = new Client([
'handler' => $stack,
'base_url' => $url,
'auth' => [$username, $password]
]);