示例#1
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);
 }
 /**
  * @return string|null
  */
 public function getLastResponseStatus()
 {
     if (is_null($this->lastResponse)) {
         return null;
     }
     return $this->lastResponse->getStatusCode();
 }
示例#3
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);
     }
 }
示例#4
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());
     }
 }
示例#5
0
 /**
  * Get status code of response.
  *
  * @return int
  * @throws ComicApiException
  */
 public function getStatusCode()
 {
     if ($this->response instanceof ResponseInterface) {
         return $this->response->getStatusCode();
     }
     throw new ComicApiException("You can't get response without making request.");
 }
示例#6
0
 protected function checkResponse(ResponseInterface $response, $data)
 {
     if ($response->getStatusCode() != 200) {
         $data = json_decode($data, true);
         throw new IdentityProviderException($data['message'], $response->getStatusCode(), $data);
     }
 }
 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;
 }
示例#8
0
 /**
  * @param ResponseInterface $response
  *
  * @return ApiResult
  */
 protected function _getResult($response)
 {
     if (!$response instanceof ResponseInterface) {
         throw new \InvalidArgumentException("{$response} should be an instance of ResponseInterface");
     }
     $result = new ApiResult();
     $result->setStatusCode($response->getStatusCode());
     $callId = $response->getHeader('X-Call-Id');
     if (!empty($callId)) {
         $result->setCallId($callId);
     }
     $decoded = json_decode((string) $response->getBody());
     if (isset($decoded->meta) && isset($decoded->data) && isset($decoded->meta->code) && $decoded->meta->code == $response->getStatusCode()) {
         $meta = $decoded->meta;
         $data = $decoded->data;
         if (isset($meta->message)) {
             $result->setStatusMessage($meta->message);
         }
         $result->setContent(json_encode($data));
     } else {
         $result->setContent((string) $response->getBody());
     }
     $result->setHeaders($response->getHeaders());
     return $result;
 }
示例#9
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);
     }
 }
示例#10
0
 private function response(ResponseInterface $response)
 {
     if ($response->getStatusCode() !== 200) {
         throw new EventbriteResponseException($response->getStatusCode(), $response->getReasonPhrase());
     }
     return $response->getBody()->getContents();
 }
示例#11
0
 protected function checkResponse(ResponseInterface $response, $data)
 {
     if ($response->getStatusCode() != 200) {
         $data = is_array($data) ? $data : json_decode($data, true);
         throw new IdentityProviderException($data['error_description'], $response->getStatusCode(), $data);
     }
 }
示例#12
0
 /**
  * Returns the HTTP status code of the error (or false if the HTTP status code is less than 399)
  * @return boolean|int The HTTP status code returned from the API.
  */
 public function errorCode()
 {
     if ($this->isError()) {
         return (int) $this->response->getStatusCode();
     }
     return false;
 }
示例#13
0
 /**
  * Checks request response and dispatch result to appropriate handler.
  *
  * @param ResponseInterface $request
  *
  * @return \Exception|mixed
  */
 public function processResourceRequestResponse(ResponseInterface $request)
 {
     $response = json_decode($request->getBody()->getContents());
     if (Response::HTTP_OK !== $request->getStatusCode() && Response::HTTP_CREATED !== $request->getStatusCode()) {
         return ExceptionHandler::handle(get_class($this), $response, $request->getStatusCode());
     }
     return isset($response->data) ? json_decode(json_encode($response->data), true) : json_decode(json_encode($response), true);
 }
 /**
  * @param array $allowedStatusCodes
  * @param ResponseInterface $response
  * @param string $errorMessage
  * @throws \HostedSolr\ApiClient\Exception\HostedSolrApiException
  */
 protected function throwApiExceptionWhenStatusIsUnexpected(array $allowedStatusCodes, $response, $errorMessage)
 {
     if (!in_array($response->getStatusCode(), $allowedStatusCodes)) {
         $exception = new HostedSolrApiException($errorMessage . ' Statuscode: ' . (int) $response->getStatusCode());
         $exception->setResponse($response);
         throw $exception;
     }
 }
示例#15
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);
     }
 }
示例#16
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;
 }
 /**
  * @author EA
  * @param ResponseInterface $response
  * @return array
  * @throws WrongResponseException
  */
 protected function processResponse(ResponseInterface $response)
 {
     if ($response->getStatusCode() == 204) {
         return null;
     }
     if (strpos($response->getHeaderLine('Content-Type'), 'text/csv') !== false) {
         return ['csv' => $response->getBody()->getContents()];
     }
     throw new WrongResponseException('Response body was malformed csv', $response->getStatusCode());
 }
示例#18
0
 protected function checkResponse(ResponseInterface $response, $data)
 {
     // Check HTTP status
     if ($response->getStatusCode() != 200 && $response->getStatusCode() != 201 && $response->getStatusCode() != 204) {
         throw new XiboApiException($response->getBody());
     }
     if (!empty($data['error'])) {
         $message = $data['error']['type'] . ': ' . $data['error']['message'];
         throw new IdentityProviderException($message, $data['error']['code'], $data);
     }
 }
示例#19
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})";
     }
 }
示例#20
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;
 }
示例#21
0
 public static function sendResponse(Response $response)
 {
     header(sprintf('HTTP/%s %s %s', $response->getProtocolVersion(), $response->getStatusCode(), $response->getReasonPhrase()));
     foreach ($response->getHeaders() as $name => $values) {
         foreach ($values as $value) {
             header(sprintf('%s: %s', $name, $value), false);
         }
     }
     if (!in_array($response->getStatusCode(), [204, 205, 304])) {
         echo $response->getBody();
     }
 }
 public function sendHeaders(ResponseInterface $response)
 {
     header(sprintf('HTTP/%s %s %s', $response->getProtocolVersion(), $response->getStatusCode(), $response->getReasonPhrase()), true, $response->getStatusCode());
     foreach ($response->getHeaders() as $header => $values) {
         $name = $this->filterHeader($header);
         $first = true;
         foreach ($values as $value) {
             header(sprintf('%s: %s', $name, $value), $first);
             $first = false;
         }
     }
     $time = round(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'], 3);
     header("X-Processing-Time: {$time} seconds");
 }
function send(ResponseInterface $response)
{
    if (!headers_sent()) {
        // status
        header(sprintf('HTTP/%s %s %s', $response->getProtocolVersion(), $response->getStatusCode(), $response->getReasonPhrase()), true, $response->getStatusCode());
        // headers
        foreach ($response->getHeaders() as $header => $values) {
            foreach ($values as $value) {
                header($header . ': ' . $value, false, $response->getStatusCode());
            }
        }
    }
    echo $response->getBody();
}
示例#24
0
 public static function create(RequestInterface $request, ResponseInterface $response, HalResource $resource, $previous = null, $message = null)
 {
     if (!$message) {
         $code = $response->getStatusCode();
         if ($code >= 400 && $code < 500) {
             $message = 'Client error';
         } elseif ($code >= 500 && $code < 600) {
             $message = 'Server error';
         } else {
             $message = 'Unsuccessful response';
         }
     }
     $message = sprintf('%s [url] %s [http method] %s [status code] %s [reason phrase] %s.', $message, $request->getRequestTarget(), $request->getMethod(), $response->getStatusCode(), $response->getReasonPhrase());
     return new self($message, $request, $response, $resource, $previous);
 }
 /**
  * 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;
 }
示例#26
0
 /**
  * Checks Fitbit API response for errors.
  *
  * @throws IdentityProviderException
  * @param  ResponseInterface $response
  * @param  array|string $data Parsed response data
  * @return void
  */
 protected function checkResponse(ResponseInterface $response, $data)
 {
     if (!empty($data['errors'][0])) {
         $message = $data['errors'][0]['errorType'] . ': ' . $data['errors'][0]['message'];
         throw new IdentityProviderException($message, $response->getStatusCode(), $data);
     }
 }
 /**
  * @param RequestInterface $request
  * @param ResponseInterface $response
  * @return CacheEntry|null entry to save, null if can't cache it
  */
 protected function getCacheObject(RequestInterface $request, ResponseInterface $response)
 {
     if (!isset($this->statusAccepted[$response->getStatusCode()])) {
         // Don't cache it
         return;
     }
     $cacheControl = new KeyValueHttpHeader($response->getHeader('Cache-Control'));
     $varyHeader = new KeyValueHttpHeader($response->getHeader('Vary'));
     if ($varyHeader->has('*')) {
         // This will never match with a request
         return;
     }
     if ($cacheControl->has('no-store')) {
         // No store allowed (maybe some sensitives data...)
         return;
     }
     if ($cacheControl->has('no-cache')) {
         // Stale response see RFC7234 section 5.2.1.4
         $entry = new CacheEntry($request, $response, new \DateTime('-1 seconds'));
         return $entry->hasValidationInformation() ? $entry : null;
     }
     foreach ($this->ageKey as $key) {
         if ($cacheControl->has($key)) {
             return new CacheEntry($request, $response, new \DateTime('+' . (int) $cacheControl->get($key) . 'seconds'));
         }
     }
     if ($response->hasHeader('Expires')) {
         $expireAt = \DateTime::createFromFormat(\DateTime::RFC1123, $response->getHeaderLine('Expires'));
         if ($expireAt !== false) {
             return new CacheEntry($request, $response, $expireAt);
         }
     }
     return new CacheEntry($request, $response, new \DateTime('-1 seconds'));
 }
 /**
  * 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}");
 }
 /**
  * Convert a PSR7 Response into a CakePHP one.
  *
  * @param PsrResponse $response The response to convert.
  * @return CakeResponse The equivalent CakePHP response
  */
 public static function toCake(PsrResponse $response)
 {
     $data = ['status' => $response->getStatusCode(), 'body' => static::getBody($response)];
     $cake = new CakeResponse($data);
     $cake->header(static::collapseHeaders($response));
     return $cake;
 }
 /**
  * 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);
     }
 }