Exemplo n.º 1
0
 /**
  * {@inheritDoc}
  */
 protected function checkResponse(ResponseInterface $response, $data)
 {
     if (isset($data['error'])) {
         if (is_array($data['error'])) {
             throw new IdentityProviderException($data['error']['messageKey'] . ': ' . $data['error']['message'] ?: $response->getReasonPhrase(), $data['error']['code'] ?: $response->getStatusCode(), $response);
         }
         throw new IdentityProviderException($data['error_description'] ?: $response->getReasonPhrase(), $data['error_code'] ?: $response->getStatusCode(), $response);
     }
 }
Exemplo n.º 2
0
 /**
  * Transform response to an error if possible.
  *
  * @param RequestInterface  $request  Request of the call
  * @param ResponseInterface $response Response of the call
  *
  * @throws ClientErrorException If response status code is a 4xx
  * @throws ServerErrorException If response status code is a 5xx
  *
  * @return ResponseInterface If status code is not in 4xx or 5xx return response
  */
 protected function transformResponseToException(RequestInterface $request, ResponseInterface $response)
 {
     if ($response->getStatusCode() >= 400 && $response->getStatusCode() < 500) {
         throw new ClientErrorException($response->getReasonPhrase(), $request, $response);
     }
     if ($response->getStatusCode() >= 500 && $response->getStatusCode() < 600) {
         throw new ServerErrorException($response->getReasonPhrase(), $request, $response);
     }
     return $response;
 }
Exemplo n.º 3
0
 /**
  * Checks if a HTTP response is a valid API response
  * @param  PsrHttpMessageResponseInterface $response The response to check
  * @return PsrHttpMessageResponseInterface           The same response
  * @throws InvalidResponseException
  */
 public static function validateResponse(\Psr\Http\Message\ResponseInterface $response)
 {
     $data = json_decode($response->getBody());
     if ($response->getStatusCode() >= 400 && $response->getStatusCode() < 500) {
         if (false === $data || !is_object($data)) {
             throw new ClientException('Your request returned an error: ' . $response->getStatusCode() . ' ' . $response->getReasonPhrase(), $response->getStatusCode());
         }
     }
     if ($response->getStatusCode() < 200 || $response->getStatusCode() >= 300 && $response->getStatusCode() < 400 || $response->getStatusCode() >= 500) {
         throw new APIException('Unsuccessful API call. Response status: ' . $response->getStatusCode() . ' ' . $response->getReasonPhrase(), $response->getStatusCode(), null, $response);
     }
     if (null === $data && $response->getStatusCode() != 204) {
         $body = $response->getBody();
         $summary = '';
         if ($body->isSeekable()) {
             $size = $body->getSize();
             $summary = $body->read(120);
             $body->rewind();
             if ($size > 120 && strlen($summary) > 120) {
                 $summary .= ' (truncated...)';
             }
             // Matches any printable character, including unicode characters:
             // letters, marks, numbers, punctuation, spacing, and separators.
             if (preg_match('/[^\\pL\\pM\\pN\\pP\\pS\\pZ\\n\\r\\t]/', $summary)) {
                 $summary = '';
             }
         }
         $summary = $summary ? ' Body: ' . $summary : '';
         throw new InvalidResponseException('Response body must be valid JSON.' . $summary, 0, null, $response->getBody());
     }
     if ($data && isset($data->errors) && (is_array($data->errors) || $data->errors instanceof Traversable)) {
         $message = [];
         foreach ($data->errors as $error) {
             $m = $error->title;
             if (isset($error->detail)) {
                 $m .= ' - ' . $error->detail;
             }
             if (isset($error->source) && $error->source instanceof Traversable) {
                 $source = [];
                 foreach ($error->source as $k => $v) {
                     $source[] = $k . ':' . $v;
                 }
                 if ($source) {
                     $m .= ' (' . implode(';', $source) . ')';
                 }
             }
             $message[] = $m;
         }
         $message = 'API responded with code ' . $response->getStatusCode() . ' and the following error(s): ' . implode(', ', $message);
         throw new APIException($message, $response->getStatusCode());
     }
     return $response;
 }
Exemplo n.º 4
0
 /**
  * Response about results
  * @param string $contentType
  * @param boolean $assoc
  * @return array
  */
 public function getResponse($contentType = 'json', $assoc = false)
 {
     $response = array('statusCode' => $this->response->getStatusCode(), 'success' => false, 'results' => null, 'message' => $this->response->getReasonPhrase());
     if (in_array($this->response->getStatusCode(), array(200, 201))) {
         $streamBody = $this->response->getBody();
         $bodyString = $streamBody->getContents();
         if ($contentType === 'json') {
             $response['results'] = $this->jsonp_decode($bodyString, $assoc);
         } else {
             $response['results'] = $bodyString;
         }
         $response['success'] = true;
     }
     return $response;
 }
Exemplo n.º 5
0
 protected function checkResponse(ResponseInterface $response, $data)
 {
     if ($response->getStatusCode() >= 400) {
         $msg = $data['error_description'] ?: (string) $response->getReasonPhrase();
         throw new IdentityProviderException($msg, $response->getStatusCode(), $response);
     }
 }
Exemplo n.º 6
0
 private function response(ResponseInterface $response)
 {
     if ($response->getStatusCode() !== 200) {
         throw new EventbriteResponseException($response->getStatusCode(), $response->getReasonPhrase());
     }
     return $response->getBody()->getContents();
 }
 /**
  * @param \Psr\Http\Message\RequestInterface $request
  * @param \Psr\Http\Message\ResponseInterface $response
  *
  * @return string
  */
 protected function describe(RequestInterface $request, ResponseInterface $response = null)
 {
     if (!$response) {
         return sprintf('%s %s failed', $request->getMethod(), $request->getUri());
     }
     return sprintf('%s %s returned %s %s', $request->getMethod(), $request->getUri(), $response->getStatusCode(), $response->getReasonPhrase());
 }
Exemplo n.º 8
0
 /**
  * Factory method to create a new exception with a normalized error message
  *
  * @param RequestInterface  $request  Request
  * @param ResponseInterface $response Response received
  * @param \Exception        $previous Previous exception
  * @param array             $ctx      Optional handler context.
  *
  * @return self
  */
 public static function create(RequestInterface $request, ResponseInterface $response = null, \Exception $previous = null, array $ctx = [])
 {
     if (!$response) {
         return new self('Error completing request', $request, null, $previous, $ctx);
     }
     $level = (int) floor($response->getStatusCode() / 100);
     if ($level === 4) {
         $label = 'Client error';
         $className = __NAMESPACE__ . '\\ClientException';
     } elseif ($level === 5) {
         $label = 'Server error';
         $className = __NAMESPACE__ . '\\ServerException';
     } else {
         $label = 'Unsuccessful request';
         $className = __CLASS__;
     }
     $uri = $request->getUri();
     $uri = static::obfuscateUri($uri);
     // Server Error: `GET /` resulted in a `404 Not Found` response:
     // <html> ... (truncated)
     $message = sprintf('%s: `%s` resulted in a `%s` response', $label, $request->getMethod() . ' ' . $uri, $response->getStatusCode() . ' ' . $response->getReasonPhrase());
     $summary = static::getResponseBodySummary($response);
     if ($summary !== null) {
         $message .= ":\n{$summary}\n";
     }
     return new $className($message, $request, $response, $previous, $ctx);
 }
 /**
  * Send the status
  *
  * @param   ResponseInterface $response The response object
  *
  * @return  void
  */
 protected function sendStatus(ResponseInterface $response)
 {
     $version = $response->getProtocolVersion();
     $status = $response->getStatusCode();
     $phrase = $response->getReasonPhrase();
     header("HTTP/{$version} {$status} {$phrase}");
 }
Exemplo n.º 10
0
 public function __invoke(ResponseInterface $response)
 {
     $level = $response->getStatusCode() >= 400 ? LogLevel::ERROR : LogLevel::INFO;
     $message = "Request returned " . $response->getStatusCode() . " - " . $response->getReasonPhrase();
     $this->logger->{$level}($message);
     return $response;
 }
Exemplo n.º 11
0
 protected function checkResponse(ResponseInterface $response, $data)
 {
     // Metadata info
     $contentTypeRaw = $response->getHeader('Content-Type');
     $contentTypeArray = explode(';', reset($contentTypeRaw));
     $contentType = reset($contentTypeArray);
     // Response info
     $responseCode = $response->getStatusCode();
     $responseMessage = $response->getReasonPhrase();
     // Data info
     $error = !empty($data['error']) ? $data['error'] : null;
     $errorCode = !empty($error['error_code']) ? $error['error_code'] : $responseCode;
     $errorDescription = !empty($data['error_description']) ? $data['error_description'] : null;
     $errorMessage = !empty($error['error_msg']) ? $error['error_msg'] : $errorDescription;
     $message = $errorMessage ?: $responseMessage;
     // Request/meta validation
     if (399 < $responseCode) {
         throw new IdentityProviderException($message, $responseCode, $data);
     }
     // Content validation
     if ('application/json' != $contentType) {
         throw new IdentityProviderException($message, $responseCode, $data);
     }
     if ($error) {
         throw new IdentityProviderException($errorMessage, $errorCode, $data);
     }
 }
Exemplo n.º 12
0
 /**
  * Helper method responsible for constructing and returning {@see BadResponseError} exceptions.
  *
  * @param RequestInterface  $request  The faulty request
  * @param ResponseInterface $response The error-filled response
  *
  * @return BadResponseError
  */
 public function httpError(RequestInterface $request, ResponseInterface $response)
 {
     $message = $this->header('HTTP Error');
     $message .= sprintf("The remote server returned a \"%d %s\" error for the following transaction:\n\n", $response->getStatusCode(), $response->getReasonPhrase());
     $message .= $this->header('Request');
     $message .= trim(str($request)) . PHP_EOL . PHP_EOL;
     $message .= $this->header('Response');
     $message .= trim(str($response)) . PHP_EOL . PHP_EOL;
     $message .= $this->header('Further information');
     // @codeCoverageIgnoreStart
     switch ($response->getStatusCode()) {
         case 400:
             $message .= "Please ensure that your input values are valid and well-formed. ";
             break;
         case 401:
             $message .= "Please ensure that your authentication credentials are valid. ";
             break;
         case 404:
             $message .= "Please ensure that the resource you're trying to access actually exists. ";
             break;
         case 500:
             $message .= "Please try this operation again once you know the remote server is operational. ";
             break;
     }
     // @codeCoverageIgnoreEnd
     $message .= "Visit http://docs.php-opencloud.com/en/latest/http-codes for more information about debugging " . "HTTP status codes, or file a support issue on https://github.com/php-opencloud/openstack/issues.";
     $e = new BadResponseError($message);
     $e->setRequest($request);
     $e->setResponse($response);
     return $e;
 }
 /**
  * Constructor.
  *
  * @param ResponseInterface $response The API response.
  */
 public function __construct(ResponseInterface $response)
 {
     $apiErrorResponse = new ApiErrorResponse();
     $apiErrorResponse->setStatus($response->getStatusCode());
     $apiErrorResponse->setMessage($response->getReasonPhrase());
     parent::__construct($apiErrorResponse);
 }
Exemplo n.º 14
0
 /**
  * Check a provider response for errors.
  *
  * @throws IdentityProviderException
  * @param  ResponseInterface $response
  * @param  string $data Parsed response data
  * @return void
  */
 protected function checkResponse(ResponseInterface $response, $data)
 {
     $statusCode = $response->getStatusCode();
     if ($statusCode >= 400) {
         throw new IdentityProviderException(isset($data['meta']['errorDetail']) ? $data['meta']['errorDetail'] : $response->getReasonPhrase(), $statusCode, $response);
     }
 }
Exemplo n.º 15
0
 /**
  * Checks a provider response for errors.
  *
  * @throws IdentityProviderException
  *
  * @param  ResponseInterface $response
  * @param  array|string      $data Parsed response data
  *
  * @return void
  */
 protected function checkResponse(ResponseInterface $response, $data)
 {
     $code = $response->getStatusCode();
     if ($code > 400) {
         throw new IdentityProviderException(isset($data['error']) ? $data['error'] : $response->getReasonPhrase(), $response->getStatusCode(), $response->getBody());
     }
 }
Exemplo n.º 16
0
 /**
  * Check a provider response for errors.
  *
  * @link https://developer.uber.com/v1/api-reference/
  * @throws IdentityProviderException
  * @param  ResponseInterface $response
  * @param  string $data Parsed response data
  * @return void
  */
 protected function checkResponse(ResponseInterface $response, $data)
 {
     $acceptableStatuses = [200, 201];
     if (!in_array($response->getStatusCode(), $acceptableStatuses)) {
         throw new IdentityProviderException($data['message'] ?: $response->getReasonPhrase(), $response->getStatusCode(), $response);
     }
 }
Exemplo n.º 17
0
 /**
  * @param ResponseInterface $response
  * @param string $type
  */
 protected function logResponse(ResponseInterface $response, $type = 'http')
 {
     $args = [ucfirst($type), $response->getStatusCode(), $response->getReasonPhrase()];
     /** @noinspection PrintfScanfArgumentsInspection */
     $this->log(sprintf(' <== (%s) %s %s', ...$args));
     $headers = $this->removeTokenFromLogs($response->getHeaders());
     $this->log('  Response headers: ' . json_encode($headers), Logger::DEBUG);
 }
Exemplo n.º 18
0
 /**
  * Save data
  *
  * @author  Florian Preusner
  * @version 2.1
  * @since   2015-05
  *
  * @param   ResponseInterface $response
  */
 public function save(ResponseInterface $response)
 {
     $this->setStatusCode($response->getStatusCode());
     $this->setStatusPhrase($response->getReasonPhrase());
     $this->setBody($response->getBody()->__toString());
     $this->setHeaders($response->getHeaders());
     $this->setProtocolVersion($response->getProtocolVersion());
 }
Exemplo n.º 19
0
 /**
  * @param ResponseInterface $response
  */
 public function send(ResponseInterface $response)
 {
     header('HTTP/' . $response->getProtocolVersion() . ' ' . $response->getStatusCode() . ' ' . $response->getReasonPhrase());
     foreach ($response->getHeaders() as $header => $values) {
         header($header . ': ' . implode(', ', $values));
     }
     parent::send($response);
 }
Exemplo n.º 20
0
 /**
  * {@inheritdoc}
  */
 public function formatResponse(ResponseInterface $response)
 {
     $message = sprintf("HTTP/%s %s %s\n", $response->getProtocolVersion(), $response->getStatusCode(), $response->getReasonPhrase());
     foreach ($response->getHeaders() as $name => $values) {
         $message .= $name . ': ' . implode(', ', $values) . "\n";
     }
     return $this->addBody($response, $message);
 }
Exemplo n.º 21
0
 /**
  * Called when the crawl will crawl has crawled the given url.
  *
  * @param \Spatie\Crawler\Url                      $url
  * @param \Psr\Http\Message\ResponseInterface|null $response
  */
 public function hasBeenCrawled(Url $url, $response)
 {
     $statusCode = $response ? $response->getStatusCode() : self::UNRESPONSIVE_HOST;
     $reason = $response ? $response->getReasonPhrase() : '';
     $colorTag = $this->getColorTagForStatusCode($statusCode);
     $timestamp = date('Y-m-d H:i:s');
     $this->output->writeln("<{$colorTag}>[{$timestamp}] {$statusCode} {$reason} - {$url}</{$colorTag}>");
     $this->crawledUrls[$statusCode][] = $url;
 }
 /**
  *
  * @param RequestInterface $request
  * @param ResponseInterface $response
  * @param \Exception $previous
  * @param array $ctx
  * @return BearerErrorResponseException
  */
 public static function create(RequestInterface $request, ResponseInterface $response = null, \Exception $previous = null, array $ctx = [])
 {
     unset($previous, $ctx);
     $label = 'Bearer error response';
     $bearerReason = self::headerToReason($response->getHeader('WWW-Authenticate'));
     $message = $label . PHP_EOL . implode(PHP_EOL, ['[status code] ' . $response->getStatusCode(), '[reason phrase] ' . $response->getReasonPhrase(), '[bearer reason] ' . $bearerReason, '[url] ' . $request->getUri()]);
     $exception = new static($message, $request, $response);
     $exception->setBearerReason($bearerReason);
     return $exception;
 }
Exemplo n.º 23
0
 function it_creates_an_http_exception(RequestInterface $request, ResponseInterface $response)
 {
     $request->getRequestTarget()->willReturn('/uri');
     $request->getMethod()->willReturn('GET');
     $response->getStatusCode()->willReturn(100);
     $response->getReasonPhrase()->willReturn('Continue');
     $e = $this->create($request, $response);
     $e->shouldHaveType('Http\\Client\\Exception\\HttpException');
     $e->getMessage()->shouldReturn('[url] /uri [http method] GET [status code] 100 [reason phrase] Continue');
 }
Exemplo n.º 24
0
 /**
  * Sends the response headers.
  *
  * @param \Psr\Http\Message\ResponseInterface $response Response instance
  */
 private function sendHeaders(ResponseInterface $response)
 {
     $statusCode = $response->getStatusCode();
     header(sprintf('HTTP/%s %d %s', $response->getProtocolVersion(), $statusCode, $response->getReasonPhrase()), true, $statusCode);
     foreach ($response->getHeaders() as $name => $values) {
         foreach ($values as $value) {
             header("{$name}: {$value}", false, $statusCode);
         }
     }
 }
Exemplo n.º 25
0
 /**
  * Emit the status line.
  *
  * Emits the status line using the protocol version and status code from
  * the response; if a reason phrase is availble, it, too, is emitted.
  *
  * @param ResponseInterface $response
  */
 private function emitStatusLine(ResponseInterface $response)
 {
     $reasonPhrase = $response->getReasonPhrase();
     header(sprintf(
         'HTTP/%s %d%s',
         $response->getProtocolVersion(),
         $response->getStatusCode(),
         ($reasonPhrase ? ' ' . $reasonPhrase : '')
     ));
 }
Exemplo n.º 26
0
 /**
  * @param ServerRequestInterface $request
  * @param ResponseInterface      $response
  * @param float                  $time1
  * @return string
  */
 private function format($request, $response, $time1)
 {
     $formats = [];
     $formats[] = $request->getMethod();
     $formats[] = '"' . $request->getUri()->getPath() . '"';
     $formats[] = $response->getReasonPhrase() . '(' . $response->getStatusCode() . ')';
     $formats[] = sprintf('%0.2f kbyte', $response->getBody()->getSize() / 1024);
     $formats[] = sprintf('%0.2f msec', (microtime(true) - $time1) * 1000);
     return implode(', ', $formats);
 }
Exemplo n.º 27
0
 private function parseHeaders(ResponseInterface $response, array &$data)
 {
     if ($response->getStatusCode() == '404') {
         $data['code'] = 'NotFound';
     }
     $data['message'] = $response->getStatusCode() . ' ' . $response->getReasonPhrase();
     if ($requestId = $response->getHeaderLine('x-amz-request-id')) {
         $data['request_id'] = $requestId;
         $data['message'] .= " (Request-ID: {$requestId})";
     }
 }
Exemplo n.º 28
0
 public function sendResponse(ResponseInterface $response)
 {
     $headers = [];
     foreach ($response->getHeaders() as $name => $values) {
         $headers[$name] = implode(', ', $values);
     }
     $response->getBody()->rewind();
     $size = $response->getBody()->getSize();
     $this->writeHead($size > 0, $response->getStatusCode(), $response->getReasonPhrase(), $headers);
     $this->end($response->getBody()->getContents());
 }
Exemplo n.º 29
0
 public function __construct(ResponseInterface $response, $message = null, $code = null, $previous = null)
 {
     if ($message === null) {
         $message = 'HTTP status code ' . $response->getStatusCode() . ' (' . $response->getReasonPhrase() . ')';
     }
     if ($code === null) {
         $code = $response->getStatusCode();
     }
     parent::__construct($message, $code, $previous);
     $this->response = $response;
 }
Exemplo n.º 30
0
 private function getStatusLine(ResponseInterface $response)
 {
     $protocol = $response->getProtocolVersion();
     $statusCode = $response->getStatusCode();
     $reasonPhrase = $response->getReasonPhrase();
     if ($reasonPhrase) {
         return "HTTP/{$protocol} {$statusCode} {$reasonPhrase}";
     } else {
         return "HTTP/{$protocol} {$statusCode}";
     }
 }