diff --git a/src/Exception/HttpTransportException.php b/src/Exception/HttpTransportException.php new file mode 100644 index 0000000..ac2bb07 --- /dev/null +++ b/src/Exception/HttpTransportException.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PrivatePackagist\ApiClient\Exception; + +use Throwable; + +class HttpTransportException extends RuntimeException +{ + private $requestUri; + + public function __construct($message = "", $code = 0, $requestUri = "", Throwable $previous = null) + { + $this->requestUri = $requestUri; + parent::__construct($message, $code, $previous); + } + + /** + * @return string + */ + public function getRequestUri() + { + return $this->requestUri; + } +} \ No newline at end of file diff --git a/src/Exception/ResourceNotFoundException.php b/src/Exception/ResourceNotFoundException.php index c3e9b5e..6fbaf64 100644 --- a/src/Exception/ResourceNotFoundException.php +++ b/src/Exception/ResourceNotFoundException.php @@ -9,6 +9,6 @@ namespace PrivatePackagist\ApiClient\Exception; -class ResourceNotFoundException extends RuntimeException +class ResourceNotFoundException extends HttpTransportException { } diff --git a/src/HttpClient/Plugin/ExceptionThrower.php b/src/HttpClient/Plugin/ExceptionThrower.php index a4d61b7..26d3312 100644 --- a/src/HttpClient/Plugin/ExceptionThrower.php +++ b/src/HttpClient/Plugin/ExceptionThrower.php @@ -11,6 +11,7 @@ use Http\Client\Common\Plugin; use PrivatePackagist\ApiClient\Exception\ErrorException; +use PrivatePackagist\ApiClient\Exception\HttpTransportException; use PrivatePackagist\ApiClient\Exception\ResourceNotFoundException; use PrivatePackagist\ApiClient\Exception\RuntimeException; use PrivatePackagist\ApiClient\HttpClient\Message\ResponseMediator; @@ -29,7 +30,7 @@ public function __construct(ResponseMediator $responseMediator = null) public function handleRequest(RequestInterface $request, callable $next, callable $first) { - return $next($request)->then(function (ResponseInterface $response) { + return $next($request)->then(function (ResponseInterface $response) use ($request) { if ($response->getStatusCode() < 400 || $response->getStatusCode() > 600) { return $response; } @@ -41,11 +42,11 @@ public function handleRequest(RequestInterface $request, callable $next, callabl } if ($response->getStatusCode() === 404) { - throw new ResourceNotFoundException($content['message'], $response->getStatusCode()); + throw new ResourceNotFoundException($content['message'], $response->getStatusCode(), $request->getUri()); } } - throw new RuntimeException(isset($content['message']) ? $content['message'] : $content, $response->getStatusCode()); + throw new HttpTransportException(isset($content['message']) ? $content['message'] : $content, $response->getStatusCode(), $request->getUri()); }); } }