X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FNetwork.php;h=bbdc51fbbb535f2e1adef957c8dbeda77d5adae4;hb=a0451e1c6285212ed406b343b97e4a53859a673d;hp=1f9184ae968f178dc22ff8029ac56d1776de0d4f;hpb=3220c78d70c76cd10b38ec364cb3d58d26e9309b;p=friendica.git diff --git a/src/Util/Network.php b/src/Util/Network.php index 1f9184ae96..bbdc51fbbb 100644 --- a/src/Util/Network.php +++ b/src/Util/Network.php @@ -15,8 +15,6 @@ use Friendica\Util\XML; use DOMDocument; use DomXPath; -require_once 'library/slinky.php'; - class Network { /** @@ -81,8 +79,20 @@ class Network $a = get_app(); + $parts = parse_url($url); + $path_parts = explode('/', $parts['path']); + foreach ($path_parts as $part) { + if (strlen($part) <> mb_strlen($part)) { + $parts2[] = rawurlencode($part); + } else { + $parts2[] = $part; + } + } + $parts['path'] = implode('/', $parts2); + $url = self::unparseURL($parts); + if (self::isUrlBlocked($url)) { - logger('z_fetch_url: domain of ' . $url . ' is blocked', LOGGER_DATA); + logger('domain of ' . $url . ' is blocked', LOGGER_DATA); return $ret; } @@ -187,7 +197,7 @@ class Network } if (curl_errno($ch) !== CURLE_OK) { - logger('fetch_url error fetching ' . $url . ': ' . curl_error($ch), LOGGER_NORMAL); + logger('error fetching ' . $url . ': ' . curl_error($ch), LOGGER_NORMAL); } $ret['errno'] = curl_errno($ch); @@ -197,7 +207,7 @@ class Network $http_code = $curl_info['http_code']; - logger('fetch_url ' . $url . ': ' . $http_code . " " . $s, LOGGER_DATA); + logger($url . ': ' . $http_code . " " . $s, LOGGER_DATA); $header = ''; // Pull out multiple headers, e.g. proxy and continuation headers @@ -219,7 +229,7 @@ class Network $newurl = $curl_info['redirect_url']; - if (($new_location_info['path'] == '') && ( $new_location_info['host'] != '')) { + if (($new_location_info['path'] == '') && ($new_location_info['host'] != '')) { $newurl = $new_location_info['scheme'] . '://' . $new_location_info['host'] . $old_location_info['path']; } @@ -231,6 +241,11 @@ class Network if (strpos($newurl, '/') === 0) { $newurl = $old_location_info["scheme"]."://".$old_location_info["host"].$newurl; } + $old_location_query = @parse_url($url, PHP_URL_QUERY); + + if ($old_location_query != '') { + $newurl .= '?' . $old_location_query; + } if (filter_var($newurl, FILTER_VALIDATE_URL)) { $redirects++; @@ -250,8 +265,8 @@ class Network if (!$ret['success']) { $ret['error'] = curl_error($ch); $ret['debug'] = $curl_info; - logger('z_fetch_url: error: '.$url.': '.$ret['return_code'].' - '.$ret['error'], LOGGER_DEBUG); - logger('z_fetch_url: debug: '.print_r($curl_info, true), LOGGER_DATA); + logger('error: '.$url.': '.$ret['return_code'].' - '.$ret['error'], LOGGER_DEBUG); + logger('debug: '.print_r($curl_info, true), LOGGER_DATA); } $ret['body'] = substr($s, strlen($header)); @@ -372,6 +387,9 @@ class Network if ($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) { $matches = []; + $new_location_info = @parse_url($curl_info['redirect_url']); + $old_location_info = @parse_url($curl_info['url']); + preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); $newurl = trim(array_pop($matches)); @@ -773,29 +791,6 @@ class Network return $url; } - public static function shortenUrl($url) - { - $slinky = new Slinky($url); - $yourls_url = Config::get('yourls', 'url1'); - if ($yourls_url) { - $yourls_username = Config::get('yourls', 'username1'); - $yourls_password = Config::get('yourls', 'password1'); - $yourls_ssl = Config::get('yourls', 'ssl1'); - $yourls = new Slinky_YourLS(); - $yourls->set('username', $yourls_username); - $yourls->set('password', $yourls_password); - $yourls->set('ssl', $yourls_ssl); - $yourls->set('yourls-url', $yourls_url); - $slinky->set_cascade([$yourls, new Slinky_Ur1ca(), new Slinky_TinyURL()]); - } else { - // setup a cascade of shortening services - // try to get a short link from these services - // in the order ur1.ca, tinyurl - $slinky->set_cascade([new Slinky_Ur1ca(), new Slinky_TinyURL()]); - } - return $slinky->short(); - } - /** * @brief Find the matching part between two url *