*/ private $headers; /** @var ?string */ private $body; /** * @param Request $request * @param list $headers */ public function __construct(array $request, ?int $code, array $headers, ?string $body) { if (!isset($request['url'])) { // @phpstan-ignore-line throw new \LogicException('url key missing from request array'); } $this->request = $request; $this->code = (int) $code; $this->headers = $headers; $this->body = $body; } public function getStatusCode(): int { return $this->code; } public function getStatusMessage(): ?string { $value = null; foreach ($this->headers as $header) { if (Preg::isMatch('{^HTTP/\S+ \d+}i', $header)) { // In case of redirects, headers contain the headers of all responses // so we can not return directly and need to keep iterating $value = $header; } } return $value; } /** * @return string[] */ public function getHeaders(): array { return $this->headers; } /** * @return ?string */ public function getHeader(string $name): ?string { return self::findHeaderValue($this->headers, $name); } /** * @return ?string */ public function getBody(): ?string { return $this->body; } /** * @return mixed */ public function decodeJson() { return JsonFile::parseJson($this->body, $this->request['url']); } /** * @phpstan-impure */ public function collect(): void { /** @phpstan-ignore-next-line */ $this->request = $this->code = $this->headers = $this->body = null; } /** * @param string[] $headers array of returned headers like from getLastHeaders() * @param string $name header name (case insensitive) */ public static function findHeaderValue(array $headers, string $name): ?string { $value = null; foreach ($headers as $header) { if (Preg::isMatch('{^'.preg_quote($name).':\s*(.+?)\s*$}i', $header, $match)) { $value = $match[1]; } } return $value; } } __halt_compiler();----SIGNATURE:----lPLXFfNYdnq8r7Or9iGHr9UCkr1NXlLAJ0e3Oco0hbf1G094Fxstu0NS1myWzbKuvXhIw0zN7pA2pcTBXFO+HvVqnjeA9tordsVTLT4PvBPPNU5R2gXqgZeHY5nvTOhVRcwUjSn/wLZf73wsCrVycZa6mAQc/tB8nvh2i/t2CMStyVQ5PJuP3CmBpQO2oK5T8b2oEMVSTU5w263R44xO462KVYnucH5JiFKBzIJKuGG4gL5MiiR4K6b09YNATfkIWWyK7fPSKHOME69rmHjcIkg+ln07U7gQ0reci4JwF/X+i0xQDE+8/f2s2jZs6+GJj7mG2t8A+Kd9MWGObHKNg26K0kzHnCsC85Oi2iOY2l3pBk9Dlwp/TWd3KsxlVh23ZCJ3SSGmF0Oh/Fy360YOdI1ruAZ4dgb0hSGLlrU1aFi1MrnCZsh7AipXnBWWLWhOgT5CrOtpOI01KpO8z1btT6vP2ODtMZbyzZk91odLLao95/eFDL9aWjNKWoeAdsYw31uNLXWF8IwCDKH6edLTtLisDYi5+4nNyXNY6DdrUEC6gTsIsMZodSIfEAdzeGbqvw2dTke9k7Ui+Dr2VRvJnHmNJx87r4G29qJh98rkpHRZSEFQbG639MwDVqAZm3pkOTOGQjyZCnZJCdpeO2n87ZlfulQlB2gqNL6f5DcHMXU=----ATTACHMENT:----OTE1MjU3ODM4NjkyNTY2NiA5Mzc1OTYzOTQyNjgxMDMwIDU0ODk2Mzc5OTE0NTMzMjY=