/** * @param CurlWrapper $curl * * @return Response|NULL */ protected function buildRedirectResponse(CurlWrapper $curl) { if ($curl->info['redirect_count'] === 0) { return NULL; } $previous = $last = NULL; /** @var Response $last */ $parts = Strings::split($curl->responseHeaders, '~(HTTP/\\d\\.\\d\\s\\d+\\s.*)~m', PREG_SPLIT_NO_EMPTY); while ($rawHeaders = array_shift($parts)) { if ($http = Strings::match($rawHeaders, CurlWrapper::VERSION_AND_STATUS)) { if ($http['code'] < 200) { continue; } $rawHeaders .= array_shift($parts); } if (!$parts) { $curl->responseHeaders = $rawHeaders; return $last; } if ($headers = CurlWrapper::parseHeaders($rawHeaders)) { $previous = new Response($curl, $headers); if ($last !== NULL) { $previous->setPrevious($last); } } $last = $previous; } return $last; }