use Friendica\Network\Probe;
use Friendica\Object\Image;
use Friendica\Util\XML;
-
-require_once 'library/slinky.php';
+use DOMDocument;
+use DomXPath;
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;
}
}
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);
$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
$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'];
}
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++;
@curl_close($ch);
- return self::zFetchURL($newurl, $binary, $redirects, $opts);
+ return self::curl($newurl, $binary, $redirects, $opts);
}
}
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));
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));
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
*