public function testInterceptsWithEvent() { $client = new Client(); $request = new Request('GET', '/'); $response = new Response(404); $transaction = new Transaction($client, $request); $except = new RequestException('foo', $request, $response); $event = new ErrorEvent($transaction, $except); $event->throwImmediately(true); $this->assertTrue($except->getThrowImmediately()); $event->throwImmediately(false); $this->assertFalse($except->getThrowImmediately()); $this->assertSame($except, $event->getException()); $this->assertSame($response, $event->getResponse()); $this->assertSame($request, $event->getRequest()); $res = null; $request->getEmitter()->on('complete', function ($e) use(&$res) { $res = $e; }); $good = new Response(200); $event->intercept($good); $this->assertTrue($event->isPropagationStopped()); $this->assertSame($res->getClient(), $event->getClient()); $this->assertSame($good, $res->getResponse()); }
public function onError(ErrorEvent $event, $name) { if ($event->getResponse()->getStatusCode() == 401) { $params = ['userName' => $this->credentials->getUsername(), 'password' => $this->credentials->getPassword(), 'createPersistentCookie' => 'false']; $this->commandClient->getCookie($params, ['http' => ['cookies' => true]]); $newResponse = $event->getClient()->send($event->getRequest()); // Intercept the original transaction with the new response $event->intercept($newResponse); } }
/** * @inheritdoc */ public function onError(ErrorEvent $event) { $response = $event->getResponse(); if ($response && 401 == $response->getStatusCode()) { $request = $event->getRequest(); if ($request->getConfig()->get('auth') == 'oauth2' && !$request->getConfig()->get('retried')) { if ($token = $this->acquireAccessToken()) { $this->accessToken = $token; $request->getConfig()->set('retried', true); $event->intercept($event->getClient()->send($request)); } } } }
/** * Request error event handler. * * Handles unauthorized errors by acquiring a new access token and * retrying the request. * * @param ErrorEvent $event Event received */ public function onError(ErrorEvent $event) { if (!$event->getResponse() || $event->getResponse()->getStatusCode() == 401) { if ($event->getRequest()->getHeader('X-Guzzle-Retry')) { // We already retried once, give up. return; } // Acquire a new access token, and retry the request. $this->acquireAccessToken(); if ($this->tokenData->accessToken) { $newRequest = clone $event->getRequest(); $this->accessTokenSigner->sign($newRequest, $this->tokenData->accessToken); $newRequest->setHeader('X-Guzzle-Retry', '1'); $event->intercept($event->getClient()->send($newRequest)); } } }