PluginProbe
Depicter — Popup & Slider Builder / 1.5.2
Depicter — Popup & Slider Builder v1.5.2
4.8.1 trunk 1.0.0 1.1.0 1.1.2 1.1.4 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.5 1.3.8 1.5.0 1.5.1 1.5.2 1.5.5 1.6.0 1.6.1 1.6.2 1.7.0 All 76 releases
depicter / modules / GuzzleHttp / Exception / RequestException.php

RequestException.php in Depicter — Popup & Slider Builder 1.5.2, at modules/GuzzleHttp/Exception/RequestException.php

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