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