diff --git a/httprl.module b/httprl.module index fc07364..f636f09 100755 --- a/httprl.module +++ b/httprl.module @@ -374,31 +374,48 @@ function httprl_send_request($fp = NULL, $url = '', $request = '', $options = '' } } - // Put redirects into the correct request url. + // Check to see if any of the requests where a redirect. $redirects = array(); foreach ($responses as $id => $result) { if (!empty($result->redirect_url)) { - $redirects[$result->url] = array( - 'redirect_url' => $result->redirect_url, - 'redirect_code' => $result->redirect_code, + $redirects[] = array( + 'redirect_url' => array($result->redirect_url[0]), + 'redirect_code' => array($result->redirect_code[0]), 'id' => $id, + 'url' => $result->url, ); unset($responses[$id]); } } + + // Put redirects into the correct request url. if (!empty($redirects)) { - foreach ($redirects as $orginal_url => $info) { - foreach ($responses as $id => &$result) { - if ($result->url == $info['redirect_url']) { - $result->redirect_url = $info['redirect_url']; - $result->redirect_code = $info['redirect_code']; - $result->url = $orginal_url; - unset($redirects[$orginal_url]); - unset($info); + // Get nested redirect info. + foreach ($redirects as $key => $info) { + foreach ($redirects as $next_key => $values) { + if ($info['redirect_url'][0] == $values['url']) { + $redirects[$key]['redirect_url'][] = $values['redirect_url'][0]; + $redirects[$key]['redirect_code'][] = $values['redirect_code'][0]; + unset($redirects[$next_key]); break; } } } + + foreach ($redirects as $key => $info) { + foreach ($responses as $id => &$result) { + foreach ($info['redirect_url'] as $re_url) { + if ($result->url == $re_url) { + $result->redirect_url = $info['redirect_url']; + $result->redirect_code = $info['redirect_code']; + $result->url = $info['url']; + unset($redirects[$key]); + unset($info); + break; + } + } + } + } } // Set output. @@ -532,9 +549,9 @@ function httprl_parse_data(&$result) { $result->options['max_redirects']--; $result->options['headers']['Referer'] = $result->url; httprl_request($location, $result->options); - $result->redirect_code = $code; + $result->redirect_code[] = $code; } - $result->redirect_url = $location; + $result->redirect_url[] = $location; break; default: $result->error = $status_message;