在guzzle 6中初始化后设置请求选项

tom*_*mvo 9 php guzzle

在版本<6的Guzzle中,我曾经在客户端初始化后动态设置我的身份验证标头.我用过setDefaultOption()这个.

$client = new Client(['base_url' => $url]);
$client->setDefaultOption('auth', [$username, $password]);
Run Code Online (Sandbox Code Playgroud)

但是,在版本6中似乎不推荐使用此功能.我将如何处理此问题?

注意:我需要这样做的原因是因为我使用guzzle进行批处理请求,其中一些请求需要不同的身份验证参数.

Ale*_*kov 5

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]
]);
Run Code Online (Sandbox Code Playgroud)