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));
         }
     }
 }