source: vendor/guzzlehttp/guzzle/src/Exception/RequestException.php

Last change on this file was e3d4e0a, checked in by Vlado 222039 <vlado.popovski@…>, 7 days ago

Upload project files

  • Property mode set to 100644
File size: 4.3 KB
Line 
1<?php
2
3namespace GuzzleHttp\Exception;
4
5use GuzzleHttp\BodySummarizer;
6use GuzzleHttp\BodySummarizerInterface;
7use Psr\Http\Client\RequestExceptionInterface;
8use Psr\Http\Message\RequestInterface;
9use Psr\Http\Message\ResponseInterface;
10
11/**
12 * HTTP Request exception
13 */
14class RequestException extends TransferException implements RequestExceptionInterface
15{
16 /**
17 * @var RequestInterface
18 */
19 private $request;
20
21 /**
22 * @var ResponseInterface|null
23 */
24 private $response;
25
26 /**
27 * @var array
28 */
29 private $handlerContext;
30
31 public function __construct(
32 string $message,
33 RequestInterface $request,
34 ?ResponseInterface $response = null,
35 ?\Throwable $previous = null,
36 array $handlerContext = []
37 ) {
38 // Set the code of the exception if the response is set and not future.
39 $code = $response ? $response->getStatusCode() : 0;
40 parent::__construct($message, $code, $previous);
41 $this->request = $request;
42 $this->response = $response;
43 $this->handlerContext = $handlerContext;
44 }
45
46 /**
47 * Wrap non-RequestExceptions with a RequestException
48 */
49 public static function wrapException(RequestInterface $request, \Throwable $e): RequestException
50 {
51 return $e instanceof RequestException ? $e : new RequestException($e->getMessage(), $request, null, $e);
52 }
53
54 /**
55 * Factory method to create a new exception with a normalized error message
56 *
57 * @param RequestInterface $request Request sent
58 * @param ResponseInterface $response Response received
59 * @param \Throwable|null $previous Previous exception
60 * @param array $handlerContext Optional handler context
61 * @param BodySummarizerInterface|null $bodySummarizer Optional body summarizer
62 */
63 public static function create(
64 RequestInterface $request,
65 ?ResponseInterface $response = null,
66 ?\Throwable $previous = null,
67 array $handlerContext = [],
68 ?BodySummarizerInterface $bodySummarizer = null
69 ): self {
70 if (!$response) {
71 return new self(
72 'Error completing request',
73 $request,
74 null,
75 $previous,
76 $handlerContext
77 );
78 }
79
80 $level = (int) \floor($response->getStatusCode() / 100);
81 if ($level === 4) {
82 $label = 'Client error';
83 $className = ClientException::class;
84 } elseif ($level === 5) {
85 $label = 'Server error';
86 $className = ServerException::class;
87 } else {
88 $label = 'Unsuccessful request';
89 $className = __CLASS__;
90 }
91
92 $uri = \GuzzleHttp\Psr7\Utils::redactUserInfo($request->getUri());
93
94 // Client Error: `GET /` resulted in a `404 Not Found` response:
95 // <html> ... (truncated)
96 $message = \sprintf(
97 '%s: `%s %s` resulted in a `%s %s` response',
98 $label,
99 $request->getMethod(),
100 $uri->__toString(),
101 $response->getStatusCode(),
102 $response->getReasonPhrase()
103 );
104
105 $summary = ($bodySummarizer ?? new BodySummarizer())->summarize($response);
106
107 if ($summary !== null) {
108 $message .= ":\n{$summary}\n";
109 }
110
111 return new $className($message, $request, $response, $previous, $handlerContext);
112 }
113
114 /**
115 * Get the request that caused the exception
116 */
117 public function getRequest(): RequestInterface
118 {
119 return $this->request;
120 }
121
122 /**
123 * Get the associated response
124 */
125 public function getResponse(): ?ResponseInterface
126 {
127 return $this->response;
128 }
129
130 /**
131 * Check if a response was received
132 */
133 public function hasResponse(): bool
134 {
135 return $this->response !== null;
136 }
137
138 /**
139 * Get contextual information about the error from the underlying handler.
140 *
141 * The contents of this array will vary depending on which handler you are
142 * using. It may also be just an empty array. Relying on this data will
143 * couple you to a specific handler, but can give more debug information
144 * when needed.
145 */
146 public function getHandlerContext(): array
147 {
148 return $this->handlerContext;
149 }
150}
Note: See TracBrowser for help on using the repository browser.