public function __construct(ResponseInterface $response) { try { $this->details = $response->json(); $message = isset($this->details['error']['message']) ? $this->details['error']['message'] : $response->getReasonPhrase(); } catch (ParseException $e) { $message = $response->getReasonPhrase(); } parent::__construct(sprintf('The request failed and returned an invalid status code ("%d") : %s', $response->getStatusCode(), $message), $response->getStatusCode()); }
private function parseHeaders(ResponseInterface $response, array &$data) { $data['message'] = $response->getStatusCode() . ' ' . $response->getReasonPhrase(); if ($requestId = $response->getHeader('x-amz-request-id')) { $data['request_id'] = $requestId; $data['message'] .= " (Request-ID: {$requestId})"; } }
/** * @param RequestInterface $request * @param ResponseInterface $response * @return string */ protected function buildMessage($request, $response) { $resource = $this->getResponseBody(); if (is_null($resource)) { $resource = ''; } $message = sprintf('[url] %s [http method] %s [status code] %s [reason phrase] %s: %s', $request->getUrl(), $request->getMethod(), $response->getStatusCode(), $response->getReasonPhrase(), $resource); return $message; }
/** * @param string $message * @param RequestInterface $request * @param ResponseInterface $response */ public function __construct($message = null, RequestInterface $request = null, ResponseInterface $response = null) { $message = $message ?: $this->message; if ($request !== null && $response !== null) { $details = "[url] " . $request->getUrl(); $details .= " [status code] " . $response->getStatusCode(); $details .= " [reason phrase] " . $response->getReasonPhrase(); $details .= ApiResponseException::getErrorDetails($response); $message .= "\nDetails:\n " . wordwrap($details); } parent::__construct($message, $this->code); }
/** * 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 * * @return self */ public static function create(RequestInterface $request, ResponseInterface $response = null, \Exception $previous = null) { if (!$response) { return new self('Error completing request', $request, null, $previous); } $level = floor($response->getStatusCode() / 100); if ($level == '4') { $label = 'Client error response'; $className = __NAMESPACE__ . '\\ClientException'; } elseif ($level == '5') { $label = 'Server error response'; $className = __NAMESPACE__ . '\\ServerException'; } else { $label = 'Unsuccessful response'; $className = __CLASS__; } $message = $label . ' [url] ' . $request->getUrl() . ' [status code] ' . $response->getStatusCode() . ' [reason phrase] ' . $response->getReasonPhrase(); return new $className($message, $request, $response, $previous); }
/** * Extract more detailed error message. * * @param Response $response * @return string */ protected function getErrorMessage(Response $response) { // This is the default: $error = $response->getReasonPhrase(); // e.g. "Bad Request" try { // We might be able to fetch an error message from the response $responseData = $response->json(); if (isset($responseData['title'])) { $error = $responseData['title']; } if (isset($responseData['detail'])) { $error .= ': ' . $responseData['detail']; } } catch (ParseException $e) { // Do nothing } return (string) $error; }
/** * Extract more detailed error message. * * @param Response $response * @return string */ protected function extractErrorMessage(Response $response) { // This is the default $error = $response->getReasonPhrase(); // e.g. "Bad Request" try { // We might be able to fetch an error message from the response $responseData = $response->json(); if (isset($responseData['results'])) { $result = $responseData['results']; if (isset($result['errors']) && is_array($result['errors']) && count($result['errors']) > 0) { $error = current($result['errors']); } elseif (isset($result['error'])) { $error = $result['error']; } } } catch (ParseException $e) { // Do nothing } return (string) $error; }
/** * Validate the response. * * @return $this */ protected function validateResponse() { $body = $this->request->getBody(); $this->response = $body->getContents(); // Send new request if ($this->request == false || $this->request->getReasonPhrase() != 'OK') { $this->objDebug->addDebug("Request", substr($this->response, 0, 4096)); $this->objDebug->addDebug("Error Response", substr($this->response, 0, 4096)); throw new \RuntimeException("Error on transmission, with message: " . $this->request->getStatusCode()); } $this->objDebug->addDebug("Request", substr($this->response, 0, 4096)); // Build response Header information. $strResponseHeader = ""; $arrHeaderKeys = array_keys($this->request->getHeaders()); foreach ($arrHeaderKeys as $keyHeader) { $strResponseHeader .= $keyHeader . ": " . $this->request->getHeader($keyHeader) . "\n"; } $this->objDebug->addDebug("Response", $strResponseHeader . "\n\n" . $this->request->getBody()->read(2048)); // Check if we have a response if (strlen($this->response) == 0) { throw new \RuntimeException("We got a blank response from server."); } // Check for "Fatal error" on client side if (strpos($this->response, "Fatal error") !== false) { throw new \RuntimeException("We got a Fatal error on client site. " . $this->response); } // Check for "Warning" on client side if (strpos($this->response, "Warning") !== false) { $intStart = stripos($this->response, "<strong>Warning</strong>:"); $intEnd = stripos($this->response, "on line"); if ($intEnd === false) { $intLength = strlen($this->response) - $intStart; } else { $intLength = $intEnd - $intStart; } throw new \RuntimeException("We got a Warning on client site.<br /><br />" . substr($this->response, $intStart, $intLength)); } return $this; }
/** * * @param HttpResponse $response * @param HttpRequest $request */ public function __construct(HttpResponse $response, HttpRequest $request = null) { $this->response = $response; $this->request = $request; parent::__construct($response->getReasonPhrase(), $response->getStatusCode()); }
/** * @return string|null */ public function reasonPhrase() { return $this->response->getReasonPhrase(); }
/** * Returns a formatted message * * @param RequestInterface $request Request that was sent * @param ResponseInterface $response Response that was received * @param \Exception $error Exception that was received * @param array $customData Associative array of custom template data * * @return string */ public function format(RequestInterface $request, ResponseInterface $response = null, \Exception $error = null, array $customData = array()) { $cache = $customData; $that = $this; return preg_replace_callback('/{\\s*([A-Za-z_\\-\\.0-9]+)\\s*}/', function (array $matches) use($request, $response, $error, &$cache, $that) { if (isset($cache[$matches[1]])) { return $cache[$matches[1]]; } $result = ''; switch ($matches[1]) { case 'request': $result = $request; break; case 'response': $result = $response; break; case 'req_headers': $result = trim($request->getMethod() . ' ' . $request->getResource()) . ' HTTP/' . $request->getProtocolVersion() . "\r\n" . $that->headers($request); break; case 'res_headers': $result = $response ? sprintf('HTTP/%s %d %s', $response->getProtocolVersion(), $response->getStatusCode(), $response->getReasonPhrase()) . "\r\n" . $that->headers($response) : 'NULL'; break; case 'req_body': $result = $request->getBody(); break; case 'res_body': $result = $response ? $response->getBody() : 'NULL'; break; case 'ts': $result = gmdate('c'); break; case 'method': $result = $request->getMethod(); break; case 'url': $result = $request->getUrl(); break; case 'resource': $result = $request->getResource(); break; case 'req_version': $result = $request->getProtocolVersion(); break; case 'res_version': $result = $response ? $response->getProtocolVersion() : 'NULL'; break; case 'host': $result = $request->getHost(); break; case 'hostname': $result = gethostname(); break; case 'code': $result = $response ? $response->getStatusCode() : 'NULL'; break; case 'phrase': $result = $response ? $response->getReasonPhrase() : 'NULL'; break; case 'error': $result = $error ? $error->getMessage() : 'NULL'; break; default: // handle prefixed dynamic headers if (strpos($matches[1], 'req_header_') === 0) { $result = $request->getHeader(substr($matches[1], 11)); } elseif (strpos($matches[1], 'res_header_') === 0) { $result = $response ? $response->getHeader(substr($matches[1], 11)) : 'NULL'; } } $cache[$matches[1]] = $result; return $result; }, $this->template); }
/** * @param ResponseInterface $response * @return mixed * @throws \Exception */ protected function _parseResponse(ResponseInterface $response) { $statusCode = $response->getStatusCode(); if ($statusCode >= 400 && $statusCode < 500) { $message = (string) $response->getBody(); if (!$message) { $message = $response->getReasonPhrase(); } switch ($statusCode) { case self::STATUS_CODE_UNAUTHORIZED: case self::STATUS_CODE_FORBIDDEN: throw new \Exception($message, $statusCode); case self::STATUS_CODE_BAD_REQUEST: if (strpos($message, "Couldn't find series:") !== false) { throw new \Exception($message, $statusCode); } } throw new \Exception($message, $statusCode); } else { if ($statusCode == self::STATUS_CODE_OK) { try { return $response->json(); } catch (ParseException $ex) { throw new \Exception(sprintf("%s; Response is '%s'", $ex->getMessage(), (string) $response->getBody()), $ex->getCode(), $ex); } } else { if ($statusCode > 200 && $statusCode < 300) { return true; } } } throw new \Exception((string) $response->getBody(), $statusCode); }
public function __construct(ResponseInterface $response) { parent::__construct($response->getReasonPhrase(), $response->getStatusCode()); $this->response = $response; }
/** * Get context fields to add to the time-line entry. * * @param RequestInterface $request * @param ResponseInterface $response * @param Exception $error * * @return array */ protected function getParameters(RequestInterface $request, ResponseInterface $response = null, Exception $error = null) { $params = []; $keys = array_intersect($this->context, $this->availableParameters); foreach ($keys as $key) { switch ($key) { case 'request': $result = $request; break; case 'response': $result = $response; break; case 'method': $result = $request->getMethod(); break; case 'url': $result = $request->getUrl(); break; case 'resource': $result = $request->getResource(); break; case 'request_version': $result = $request->getProtocolVersion(); break; case 'response_version': $result = $response ? $response->getProtocolVersion() : 'NULL'; break; case 'host': $result = $request->getHost(); break; case 'hostname': $result = gethostname(); break; case 'status_code': $result = $response ? $response->getStatusCode() : 'NULL'; break; case 'phrase': $result = $response ? $response->getReasonPhrase() : 'NULL'; break; case 'error': $result = $error ? $error->getMessage() : 'NULL'; break; } $params[$key] = (string) $result ?: ''; } return $params; }
private function createResponse(GuzzleResponse $response) { $body = $response->getBody(); return new Response($response->getStatusCode(), $response->getHeaders(), isset($body) ? $body->detach() : null, $response->getProtocolVersion(), $response->getReasonPhrase()); }
/** * @param ResponseInterface $guzzleResponse * @return mixed */ protected function getResponseOptions($guzzleResponse) { $options = []; $reasonPhrase = $guzzleResponse->getReasonPhrase(); if (!empty($reasonPhrase)) { $options['reason_phrase'] = $reasonPhrase; } $protocolVersion = $guzzleResponse->getProtocolVersion(); if (!empty($protocolVersion)) { $options['protocol_version'] = $protocolVersion; return $options; } return $options; }
/** * 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((string) $request) . PHP_EOL . PHP_EOL; $message .= $this->header('Response'); $message .= trim((string) $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; }
public function responseHandler(ResponseInterface $responseObj) { $httpResponseCode = (int) $responseObj->getStatusCode(); $httpResponsePhrase = (string) $responseObj->getReasonPhrase(); $body = $responseObj->getBody(); if ($httpResponseCode == 200) { if (!$body) { throw new EmptyResponse(Blocktrail::EXCEPTION_EMPTY_RESPONSE, $httpResponseCode); } $result = new Response($httpResponseCode, $body); return $result; } elseif ($httpResponseCode == 400 || $httpResponseCode == 403) { $data = json_decode($body, true); if ($data && isset($data['msg'], $data['code'])) { throw new EndpointSpecificError(!is_string($data['msg']) ? json_encode($data['msg']) : $data['msg'], $data['code']); } else { throw new UnknownEndpointSpecificError($this->verboseErrors ? $body : Blocktrail::EXCEPTION_UNKNOWN_ENDPOINT_SPECIFIC_ERROR); } } elseif ($httpResponseCode == 401) { throw new InvalidCredentials($this->verboseErrors ? $body : Blocktrail::EXCEPTION_INVALID_CREDENTIALS, $httpResponseCode); } elseif ($httpResponseCode == 404) { if ($httpResponsePhrase == "Endpoint Not Found") { throw new MissingEndpoint($this->verboseErrors ? $body : Blocktrail::EXCEPTION_MISSING_ENDPOINT, $httpResponseCode); } else { throw new ObjectNotFound($this->verboseErrors ? $body : Blocktrail::EXCEPTION_OBJECT_NOT_FOUND, $httpResponseCode); } } elseif ($httpResponseCode == 500) { throw new GenericServerError(Blocktrail::EXCEPTION_GENERIC_SERVER_ERROR . "\nServer Response: " . $body, $httpResponseCode); } else { throw new GenericHTTPError(Blocktrail::EXCEPTION_GENERIC_HTTP_ERROR . "\nServer Response: " . $body, $httpResponseCode); } }
/** * @param RequestInterface $request * @param ResponseInterface $response * @return string */ protected function buildMessage($request, $response) { $message = sprintf('[url] %s [http method] %s [status code] %s [reason phrase] %s.', $request->getUrl(), $request->getMethod(), $response->getStatusCode(), $response->getReasonPhrase()); return $message; }
public function visit(CommandInterface $command, ResponseInterface $response, Parameter $param, &$result, array $context = []) { $result[$param->getName()] = $param->filter($response->getReasonPhrase()); }
/** * @param $emailAddress * @param ResponseInterface $response */ public function logHTTPResponseError($emailAddress, ResponseInterface $response) { $this->persist(new LogEntry($emailAddress, sprintf("HTTP ERROR: %s - %s", $response->getStatusCode(), $response->getReasonPhrase()))); }
private function createPsr7Response(GuzzleResponse $response) { if ($body = $response->getBody()) { $body = new PsrStream($body); } return new Psr7Response($response->getStatusCode(), $response->getHeaders(), $body, $response->getReasonPhrase()); }
/** * Collect & sanitize data about a Guzzle response. * * @param ResponseInterface $response Guzzle response. * @return array */ private function collectResponse(ResponseInterface $response) { return ['statusCode' => $response->getStatusCode(), 'reasonPhrase' => $response->getReasonPhrase(), 'headers' => $response->getHeaders(), 'body' => (string) $response->getBody()]; }