X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fnetwork.php;h=b6181cfb64b8bb44214b042bcd92984db2587acc;hb=4487515d0c8dc295e5f8b7a137accfa741b5cf52;hp=f6f59fa2d8f26020ca182461c0962edc1fbfd0a9;hpb=c53bdfb1639d7ca92fa6fbbcfcb75932f2da5088;p=friendica.git diff --git a/include/network.php b/include/network.php index f6f59fa2d8..b6181cfb64 100644 --- a/include/network.php +++ b/include/network.php @@ -4,8 +4,10 @@ // curl wrapper. If binary flag is true, return binary // results. +// Set the cookiejar argument to a string (e.g. "/tmp/friendica-cookies.txt") +// to preserve cookies from one request to the next. if(! function_exists('fetch_url')) { -function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_content=Null) { +function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_content=Null, $cookiejar = 0) { $stamp1 = microtime(true); @@ -17,6 +19,10 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_ @curl_setopt($ch, CURLOPT_HEADER, true); + if($cookiejar) { + curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiejar); + curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiejar); + } // These settings aren't needed. We're following the location already. // @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); @@ -93,15 +99,15 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_ $newurl = trim(array_pop($matches)); } if(strpos($newurl,'/') === 0) - $newurl = $url . $newurl; - $url_parsed = @parse_url($newurl); - if (isset($url_parsed)) { + $newurl = $old_location_info["scheme"]."://".$old_location_info["host"].$newurl; + if (filter_var($newurl, FILTER_VALIDATE_URL)) { $redirects++; - return fetch_url($newurl,$binary,$redirects,$timeout); + return fetch_url($newurl,$binary,$redirects,$timeout,$accept_content,$cookiejar); } } $a->set_curl_code($http_code); + $a->set_curl_content_type($curl_info['content_type']); $body = substr($s,strlen($header)); $a->set_curl_headers($header); @@ -188,9 +194,8 @@ function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0) preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); $newurl = trim(array_pop($matches)); if(strpos($newurl,'/') === 0) - $newurl = $url . $newurl; - $url_parsed = @parse_url($newurl); - if (isset($url_parsed)) { + $newurl = $old_location_info["scheme"] . "://" . $old_location_info["host"] . $newurl; + if (filter_var($newurl, FILTER_VALIDATE_URL)) { $redirects++; return fetch_url($newurl,false,$redirects,$timeout); } @@ -820,12 +825,12 @@ function add_fcontact($arr,$update = false) { } -function scale_external_images($s, $include_link = true, $scale_replace = false) { +function scale_external_images($srctext, $include_link = true, $scale_replace = false) { $a = get_app(); // Picture addresses can contain special characters - $s = htmlspecialchars_decode($s); + $s = htmlspecialchars_decode($srctext); $matches = null; $c = preg_match_all('/\[img.*?\](.*?)\[\/img\]/ism',$s,$matches,PREG_SET_ORDER); @@ -847,7 +852,9 @@ function scale_external_images($s, $include_link = true, $scale_replace = false) $scaled = str_replace($scale_replace[0], $scale_replace[1], $mtch[1]); else $scaled = $mtch[1]; - $i = fetch_url($scaled); + $i = @fetch_url($scaled); + if(! $i) + return $srctext; $cachefile = get_cachefile(hash("md5", $scaled)); if ($cachefile != '') {