PluginProbe
QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress / 3.2.1
QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress v3.2.1
4.1.2 4.1.1 4.1.0 4.0.1 4.0.0 3.3.1 3.3.0 trunk 1.0.0 2.0.0 2.1.0 3.0.0 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8
quickwebp / includes / vendor / guzzlehttp / psr7 / src / Request.php

Request.php in QuickWebP – WebP & AVIF Image Optimizer, Compression & SEO for WordPress 3.2.1, at includes/vendor/guzzlehttp/psr7/src/Request.php

158 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace GuzzleHttp\Psr7;
6
7 use InvalidArgumentException;
8 use Psr\Http\Message\RequestInterface;
9 use Psr\Http\Message\StreamInterface;
10 use Psr\Http\Message\UriInterface;
11
12 /**
13 * PSR-7 request implementation.
14 */
15 class Request implements RequestInterface
16 {
17 use MessageTrait;
18
19 /** @var string */
20 private $method;
21
22 /** @var string|null */
23 private $requestTarget;
24
25 /** @var UriInterface */
26 private $uri;
27
28 /**
29 * @param string $method HTTP method
30 * @param string|UriInterface $uri URI
31 * @param array<string, string|string[]> $headers Request headers
32 * @param string|resource|StreamInterface|null $body Request body
33 * @param string $version Protocol version
34 */
35 public function __construct(
36 string $method,
37 $uri,
38 array $headers = [],
39 $body = null,
40 string $version = '1.1'
41 ) {
42 $this->assertMethod($method);
43 if (!($uri instanceof UriInterface)) {
44 $uri = new Uri($uri);
45 }
46
47 $this->method = strtoupper($method);
48 $this->uri = $uri;
49 $this->setHeaders($headers);
50 $this->protocol = $version;
51
52 if (!isset($this->headerNames['host'])) {
53 $this->updateHostFromUri();
54 }
55
56 if ($body !== '' && $body !== null) {
57 $this->stream = Utils::streamFor($body);
58 }
59 }
60
61 public function getRequestTarget(): string
62 {
63 if ($this->requestTarget !== null) {
64 return $this->requestTarget;
65 }
66
67 $target = $this->uri->getPath();
68 if ($target === '') {
69 $target = '/';
70 }
71 if ($this->uri->getQuery() != '') {
72 $target .= '?' . $this->uri->getQuery();
73 }
74
75 return $target;
76 }
77
78 public function withRequestTarget($requestTarget): RequestInterface
79 {
80 if (preg_match('#\s#', $requestTarget)) {
81 throw new InvalidArgumentException(
82 'Invalid request target provided; cannot contain whitespace'
83 );
84 }
85
86 $new = clone $this;
87 $new->requestTarget = $requestTarget;
88 return $new;
89 }
90
91 public function getMethod(): string
92 {
93 return $this->method;
94 }
95
96 public function withMethod($method): RequestInterface
97 {
98 $this->assertMethod($method);
99 $new = clone $this;
100 $new->method = strtoupper($method);
101 return $new;
102 }
103
104 public function getUri(): UriInterface
105 {
106 return $this->uri;
107 }
108
109 public function withUri(UriInterface $uri, $preserveHost = false): RequestInterface
110 {
111 if ($uri === $this->uri) {
112 return $this;
113 }
114
115 $new = clone $this;
116 $new->uri = $uri;
117
118 if (!$preserveHost || !isset($this->headerNames['host'])) {
119 $new->updateHostFromUri();
120 }
121
122 return $new;
123 }
124
125 private function updateHostFromUri(): void
126 {
127 $host = $this->uri->getHost();
128
129 if ($host == '') {
130 return;
131 }
132
133 if (($port = $this->uri->getPort()) !== null) {
134 $host .= ':' . $port;
135 }
136
137 if (isset($this->headerNames['host'])) {
138 $header = $this->headerNames['host'];
139 } else {
140 $header = 'Host';
141 $this->headerNames['host'] = 'Host';
142 }
143 // Ensure Host is the first header.
144 // See: http://tools.ietf.org/html/rfc7230#section-5.4
145 $this->headers = [$header => [$host]] + $this->headers;
146 }
147
148 /**
149 * @param mixed $method
150 */
151 private function assertMethod($method): void
152 {
153 if (!is_string($method) || $method === '') {
154 throw new InvalidArgumentException('Method must be a non-empty string.');
155 }
156 }
157 }
158