diff --git a/src/Interceptor/FollowRedirects.php b/src/Interceptor/FollowRedirects.php index 59d6ad94..00a4fd4b 100644 --- a/src/Interceptor/FollowRedirects.php +++ b/src/Interceptor/FollowRedirects.php @@ -143,11 +143,13 @@ private function followRedirects( $requestNr = 2; do { - $request = $this->createRedirectRequest($clonedRequest, $response); + $request = $this->updateRequestForRedirect($clonedRequest, $response); if ($request === null) { return $response; } + $clonedRequest = $this->cloneRequest($request); + $redirectResponse = $client->request($request, $cancellationToken); $redirectResponse->setPreviousResponse($response); @@ -178,7 +180,7 @@ private function cloneRequest(Request $originalRequest): Request return $request; } - private function createRedirectRequest(Request $clonedRequest, Response $response): ?Request + private function updateRequestForRedirect(Request $request, Response $response): ?Request { $redirectUri = $this->getRedirectUri($response); if ($redirectUri === null) { @@ -188,21 +190,21 @@ private function createRedirectRequest(Request $clonedRequest, Response $respons $originalUri = $response->getRequest()->getUri(); $isSameHost = $redirectUri->getAuthority() === $originalUri->getAuthority(); - $clonedRequest->setUri($redirectUri); + $request->setUri($redirectUri); if (!$isSameHost) { // Avoid copying headers for security reasons, any interceptor headers will be added again, // but application headers will be discarded. - $clonedRequest->setHeaders([]); + $request->setHeaders([]); } if ($this->autoReferrer) { - $this->assignRedirectRefererHeader($clonedRequest, $originalUri, $redirectUri); + $this->assignRedirectRefererHeader($request, $originalUri, $redirectUri); } $this->discardResponseBody($response); - return $clonedRequest; + return $request; } /**