private function getRedirectUri(RequestCycle $cycle)
{
$request = $cycle->request;
$response = $cycle->response;
if (!$cycle->options[self::OP_FOLLOW_LOCATION]) {
return null;
}
if (!$response->hasHeader('Location')) {
return null;
}
$status = $response->getStatus();
$method = $request->getMethod();
if ($status < 300 || $status > 399 || $method === 'HEAD') {
return null;
}
$requestUri = new Uri($request->getUri());
$redirectLocation = current($response->getHeader('Location'));
if (!$requestUri->canResolve($redirectLocation)) {
return null;
}
$newUri = $requestUri->resolve($redirectLocation);
$cycle->redirectHistory[] = $request->getUri();
return $newUri;
}