In Guzzle with version < 6 I used to set my authentication header on the fly after the initialisation of the client. I used setDefaultOption()
for this.
$client = new Client(['base_url' => $url]);
$client->setDefaultOption('auth', [$username, $password]);
However this functionality seems to be deprecated in version 6. How would I go about this?
Note: the reason I need to do it this way is because I'm using guzzle for batch requests where some requests need different authentication parameters.
The best option for Guzzle 6+ is to recreate the Client. Guzzle's HTTP client is now immutable, so whenever you want to change something you should create a new object.
This doesn't mean that you have to recreate the whole object graph, HandlerStack and middlewares can stay the same:
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]
]);
You can send the 'auth' param, while constructing the client or sending the request.
$client = new Client(['base_url' => $url, 'auth' => ['username', 'password', 'digest']]);
OR
$client->get('/get', ['auth' => ['username', 'password', 'digest']]);
The other way is to rewrite the requestAsync method and add your custom logic in it. But there is no reason for that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With