diff --git a/src/HttpClients/HttpClientRawResponse.php b/src/HttpClients/HttpClientRawResponse.php index 09c541d..ad49e38 100644 --- a/src/HttpClients/HttpClientRawResponse.php +++ b/src/HttpClients/HttpClientRawResponse.php @@ -69,21 +69,20 @@ private function setHeadersAndCode($rawHeaders) } $headers = []; $httpCode = 0; - $rawHeaders = implode("\r\n", $rawHeaders); - // Normalize line breaks - $rawHeaders = str_replace("\r\n", "\n", $rawHeaders); - // There will be multiple headers if a 301 was followed - // or a proxy was followed, etc - $headerCollection = explode("\n\n", trim($rawHeaders)); + + $headerCollection = $rawHeaders; // We just want the last response (at the end) - $rawHeader = array_pop($headerCollection); - $headerComponents = explode("\n", (string)$rawHeader); - foreach ($headerComponents as $line) { - if (strpos($line, ': ') === false) { - $httpCode = $this->getHttpResponseCodeFromHeader($line); - } else { - list($key, $value) = explode(': ', $line, 2); - $headers[$key] = $value; + while ($httpCode === 0 && count($headerCollection) > 0) { + $headers = []; + $rawHeader = array_pop($headerCollection); + $headerComponents = explode("\n", (string)$rawHeader); + foreach ($headerComponents as $line) { + if (strpos($line, ': ') === false) { + $httpCode = $this->getHttpResponseCodeFromHeader($line); + } else { + list($key, $value) = explode(': ', $line, 2); + $headers[$key] = $value; + } } }