context()['method'] ?? ''))); if ($method === '') { return 'GET'; } return substr($method, 0, 8); } public function path(): string { return trim((string) ($this->context()['path'] ?? '')); } public function ip(): string { return trim((string) ($this->context()['ip'] ?? '')); } public function userAgent(): string { return trim((string) ($this->context()['user_agent'] ?? '')); } /** * @return array */ public function queryParams(): array { /** @var array $query */ $query = $_GET; return $query; } public function isSecure(): bool { $https = strtolower(trim((string) ($_SERVER['HTTPS'] ?? ''))); if (in_array($https, ['on', '1', 'true'], true)) { return true; } $forwarded = strtolower(trim((string) ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? ''))); if ($forwarded === '') { return false; } $parts = explode(',', $forwarded); return trim($parts[0]) === 'https'; } /** * @return array */ private function context(): array { RequestContext::ensureStarted(); return RequestContext::context(); } }