client = $clientImplementation; $this->requestFactory = $requestFactory; } public function sendRequest(RequestInterface $request): ResponseInterface { $stop = $this->maxRedirects; for ($a = 0; $a <= $stop; $a++) { $response = $this->client->sendRequest($request); $code = $response->getStatusCode(); if ($code < 300 || $code === 304) { return $response; } elseif ($code >= 400) { throw new Exception("httpStatus".$code); } else { $loc = $response->getHeader("Location"); for ($b = 0; $b < sizeof($loc); $b++) { if ($url = Url::fromString($loc[$b], (string) $request->getUri())) { $request = $request->withUri($url); if ($code === 303 && !in_array($request->getMethod(), ["GET", "HEAD"])) { $request = $request->withMethod("GET"); continue 2; } } } return $response; } } throw new Exception("tooManyRedirects"); } public function createRequest(string $method, $uri): RequestInterface { return $this->requestFactory->createRequest($method, $uri); } }