/** * 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(); }
protected function checkResponse(ResponseInterface $response, $data) { if ($response->getStatusCode() >= 400) { $msg = $data['error_description'] ?: (string) $response->getReasonPhrase(); throw new IdentityProviderException($msg, $response->getStatusCode(), $response); } }
/** * 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()); } }
/** * 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."); }
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; }
/** * @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; }
/** * 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); } }
private function response(ResponseInterface $response) { if ($response->getStatusCode() !== 200) { throw new EventbriteResponseException($response->getStatusCode(), $response->getReasonPhrase()); } return $response->getBody()->getContents(); }
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); } }
/** * 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; }
/** * 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; } }
/** * {@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); } }
/** * 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()); }
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); } }
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})"; } }
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; }
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(); }
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; }
/** * 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); } }