scheme = $requestUrl['scheme']; $this->host = $requestUrl['host']; $this->path = $requestUrl['path'] ?? '/'; $this->query = []; if (isset($requestUrl['query'])) { foreach (explode('&', $requestUrl['query']) as $queryString) { $query = explode('=', $queryString); if (empty($query[1])) { $this->query['input'] = $query[0]; } else { $this->query[$query[0]] = $query[1]; } } } $this->clientCertificate = $clientCertificate; } /** * @param resource $resource */ public static function fromResource($resource): static { $request = Request::fromString(fread($resource, 1024)); $clientCertificate = null; $streamParams = stream_context_get_params($resource); $peerCertificate = $streamParams['options']['ssl']['peer_certificate'] ?? null; if ($peerCertificate) { $clientCertificate = new ClientCertificate($peerCertificate); $request->setClientCertificate($clientCertificate); } return $request; } public static function fromString(string $string): static { $requestUrl = explode("\r\n", $string)[0] ?? ''; return new Request($requestUrl); } public function getPath(): string { return $this->path; } public function getQuery(): array { return $this->query; } public function get(string $key): mixed { return $this->query[$key] ?? null; } public function set(string $key, string $value): self { $this->query[$key] = $value; return $this; } public function getClientCertificate(): ?ClientCertificate { return $this->clientCertificate; } public function setClientCertificate(ClientCertificate $clientCertificate): self { $this->clientCertificate = $clientCertificate; return $this; } }