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

在版本<6的Guzzle中,我用来在客户端初始化后即时设置我的认证头。 我为此使用了setDefaultOption()

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

然而,这个功能似乎在版本6中被弃用。我该如何解决这个问题?

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


Guzzle 6+的最佳选择是重新创建客户端。 Guzzle的HTTP客户端现在是不可变的,所以无论何时你想改变某些东西,你都应该创建一个新的对象。

这并不意味着你必须重新创建整个对象图,HandlerStack和中间件可以保持不变:

use GuzzleHttpClient;
use GuzzleHttpHandlerStack;

$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]
]);

您可以在构建客户端或发送请求时发送'auth'参数。

$client = new Client(['base_url' => $url, 'auth' => ['username', 'password', 'digest']]);

要么

$client->get('/get', ['auth' => ['username', 'password', 'digest']]);

另一种方法是重写requestAsync方法并在其中添加自定义逻辑。 但没有理由。

链接地址: http://www.djcxy.com/p/86867.html

上一篇: Set request options after initialisation in guzzle 6

下一篇: How to manage Services in Angular2