Chris@0: method = strtoupper($method); Chris@0: $this->uri = $uri; Chris@0: $this->setHeaders($headers); Chris@0: $this->protocol = $version; Chris@0: Chris@17: if (!isset($this->headerNames['host'])) { Chris@0: $this->updateHostFromUri(); Chris@0: } Chris@0: Chris@0: if ($body !== '' && $body !== null) { Chris@0: $this->stream = stream_for($body); Chris@0: } Chris@0: } Chris@0: Chris@0: public function getRequestTarget() Chris@0: { Chris@0: if ($this->requestTarget !== null) { Chris@0: return $this->requestTarget; Chris@0: } Chris@0: Chris@0: $target = $this->uri->getPath(); Chris@0: if ($target == '') { Chris@0: $target = '/'; Chris@0: } Chris@0: if ($this->uri->getQuery() != '') { Chris@0: $target .= '?' . $this->uri->getQuery(); Chris@0: } Chris@0: Chris@0: return $target; Chris@0: } Chris@0: Chris@0: public function withRequestTarget($requestTarget) Chris@0: { Chris@0: if (preg_match('#\s#', $requestTarget)) { Chris@0: throw new InvalidArgumentException( Chris@0: 'Invalid request target provided; cannot contain whitespace' Chris@0: ); Chris@0: } Chris@0: Chris@0: $new = clone $this; Chris@0: $new->requestTarget = $requestTarget; Chris@0: return $new; Chris@0: } Chris@0: Chris@0: public function getMethod() Chris@0: { Chris@0: return $this->method; Chris@0: } Chris@0: Chris@0: public function withMethod($method) Chris@0: { Chris@0: $new = clone $this; Chris@0: $new->method = strtoupper($method); Chris@0: return $new; Chris@0: } Chris@0: Chris@0: public function getUri() Chris@0: { Chris@0: return $this->uri; Chris@0: } Chris@0: Chris@0: public function withUri(UriInterface $uri, $preserveHost = false) Chris@0: { Chris@0: if ($uri === $this->uri) { Chris@0: return $this; Chris@0: } Chris@0: Chris@0: $new = clone $this; Chris@0: $new->uri = $uri; Chris@0: Chris@17: if (!$preserveHost || !isset($this->headerNames['host'])) { Chris@0: $new->updateHostFromUri(); Chris@0: } Chris@0: Chris@0: return $new; Chris@0: } Chris@0: Chris@0: private function updateHostFromUri() Chris@0: { Chris@0: $host = $this->uri->getHost(); Chris@0: Chris@0: if ($host == '') { Chris@0: return; Chris@0: } Chris@0: Chris@0: if (($port = $this->uri->getPort()) !== null) { Chris@0: $host .= ':' . $port; Chris@0: } Chris@0: Chris@0: if (isset($this->headerNames['host'])) { Chris@0: $header = $this->headerNames['host']; Chris@0: } else { Chris@0: $header = 'Host'; Chris@0: $this->headerNames['host'] = 'Host'; Chris@0: } Chris@0: // Ensure Host is the first header. Chris@0: // See: http://tools.ietf.org/html/rfc7230#section-5.4 Chris@0: $this->headers = [$header => [$host]] + $this->headers; Chris@0: } Chris@0: }