From 452ff19d7335906bdc7f2a921e77e3656ed11be9 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 13 Jan 2013 18:51:48 +0100 Subject: [PATCH] Redirects sometimes only seems to send the hostname and no path. "fetch_url" respects this. --- include/network.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/include/network.php b/include/network.php index 1ecee598..df23c254 100644 --- a/include/network.php +++ b/include/network.php @@ -76,9 +76,17 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_ } if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) { - $matches = array(); - preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); - $newurl = trim(array_pop($matches)); + $new_location_info = @parse_url($curl_info["redirect_url"]); + $old_location_info = @parse_url($curl_info["url"]); + + $newurl = $curl_info["redirect_url"]; + + if (($new_location_info["path"] == "") AND ($new_location_info["host"] != "")) + $newurl = $new_location_info["scheme"]."://".$new_location_info["host"].$old_location_info["path"]; + + //$matches = array(); + //preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); + //$newurl = trim(array_pop($matches)); if(strpos($newurl,'/') === 0) $newurl = $url . $newurl; $url_parsed = @parse_url($newurl);