You are here

RequestException.php in Zircon Profile 8.0

Same filename and directory in other branches
  1. 8 vendor/guzzlehttp/guzzle/src/Exception/RequestException.php

File

vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
View source
<?php

namespace GuzzleHttp\Exception;

use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Promise\PromiseInterface;

/**
 * HTTP Request exception
 */
class RequestException extends TransferException {

  /** @var RequestInterface */
  private $request;

  /** @var ResponseInterface */
  private $response;

  /** @var array */
  private $handlerContext;
  public function __construct($message, RequestInterface $request, ResponseInterface $response = null, \Exception $previous = null, array $handlerContext = []) {

    // Set the code of the exception if the response is set and not future.
    $code = $response && !$response instanceof PromiseInterface ? $response
      ->getStatusCode() : 0;
    parent::__construct($message, $code, $previous);
    $this->request = $request;
    $this->response = $response;
    $this->handlerContext = $handlerContext;
  }

  /**
   * Wrap non-RequestExceptions with a RequestException
   *
   * @param RequestInterface $request
   * @param \Exception       $e
   *
   * @return RequestException
   */
  public static function wrapException(RequestInterface $request, \Exception $e) {
    return $e instanceof RequestException ? $e : new RequestException($e
      ->getMessage(), $request, null, $e);
  }

  /**
   * 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 = 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
      ->getUri() . ' [http method] ' . $request
      ->getMethod() . ' [status code] ' . $response
      ->getStatusCode() . ' [reason phrase] ' . $response
      ->getReasonPhrase();
    return new $className($message, $request, $response, $previous, $ctx);
  }

  /**
   * Get the request that caused the exception
   *
   * @return RequestInterface
   */
  public function getRequest() {
    return $this->request;
  }

  /**
   * Get the associated response
   *
   * @return ResponseInterface|null
   */
  public function getResponse() {
    return $this->response;
  }

  /**
   * Check if a response was received
   *
   * @return bool
   */
  public function hasResponse() {
    return $this->response !== null;
  }

  /**
   * Get contextual information about the error from the underlying handler.
   *
   * The contents of this array will vary depending on which handler you are
   * using. It may also be just an empty array. Relying on this data will
   * couple you to a specific handler, but can give more debug information
   * when needed.
   *
   * @return array
   */
  public function getHandlerContext() {
    return $this->handlerContext;
  }

}

Classes

Namesort descending Description
RequestException HTTP Request exception