]> git.mxchange.org Git - friendica.git/commitdiff
Move post/curl/fetchUrl/fetchUrlFull to own class "Network\HTTPRequest"
authornupplaPhil <admin+github@philipp.info>
Wed, 4 Mar 2020 21:07:05 +0000 (22:07 +0100)
committerHypolite Petovan <hypolite@mrpetovan.com>
Tue, 21 Jul 2020 06:56:10 +0000 (02:56 -0400)
43 files changed:
mod/dfrn_confirm.php
mod/dfrn_poll.php
mod/dfrn_request.php
mod/match.php
mod/oexchange.php
mod/ostatus_subscribe.php
mod/parse_url.php
mod/pubsubhubbub.php
mod/redir.php
src/Content/OEmbed.php
src/Content/Text/BBCode.php
src/Core/Installer.php
src/Core/Protocol.php
src/Core/Search.php
src/Core/Worker.php
src/Model/APContact.php
src/Model/GContact.php
src/Model/GServer.php
src/Model/Photo.php
src/Model/Profile.php
src/Model/User.php
src/Module/Admin/Summary.php
src/Module/Debug/Feed.php
src/Module/Magic.php
src/Network/HTTPRequest.php [new file with mode: 0644]
src/Network/Probe.php
src/Protocol/ActivityPub.php
src/Protocol/DFRN.php
src/Protocol/Diaspora.php
src/Protocol/OStatus.php
src/Protocol/PortableContact.php
src/Protocol/Salmon.php
src/Util/ExAuth.php
src/Util/HTTPSignature.php
src/Util/Images.php
src/Util/Network.php
src/Util/ParseUrl.php
src/Worker/CheckVersion.php
src/Worker/CronJobs.php
src/Worker/Directory.php
src/Worker/OnePoll.php
src/Worker/PubSubPublish.php
src/Worker/SearchDirectory.php

index 8b87bae5d3ad86b571dcd3f42298533dfb413df3..f78e8d55aa2c7e772a94312c72bbcb1fca14f86e 100644 (file)
@@ -42,10 +42,10 @@ use Friendica\Model\Contact;
 use Friendica\Model\Group;
 use Friendica\Model\Notify\Type;
 use Friendica\Model\User;
+use Friendica\Network\HTTPRequest;
 use Friendica\Protocol\Activity;
 use Friendica\Util\Crypto;
 use Friendica\Util\DateTimeFormat;
-use Friendica\Util\Network;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
 
@@ -224,7 +224,7 @@ function dfrn_confirm_post(App $a, $handsfree = null)
                 *
                 */
 
-               $res = Network::post($dfrn_confirm, $params, [], 120)->getBody();
+               $res = HTTPRequest::post($dfrn_confirm, $params, [], 120)->getBody();
 
                Logger::log(' Confirm: received data: ' . $res, Logger::DATA);
 
index 8d50761db18c755134573a7b2b5b5721516d68c8..faa55a10824805925ba5418f5e8206734f9010da 100644 (file)
 
 use Friendica\App;
 use Friendica\Core\Logger;
-use Friendica\Core\System;
 use Friendica\Core\Session;
+use Friendica\Core\System;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Network\HTTPRequest;
 use Friendica\Protocol\DFRN;
 use Friendica\Protocol\OStatus;
-use Friendica\Util\Network;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
 
@@ -115,7 +115,7 @@ function dfrn_poll_init(App $a)
                );
 
                if (DBA::isResult($r)) {
-                       $s = Network::fetchUrl($r[0]['poll'] . '?dfrn_id=' . $my_id . '&type=profile-check');
+                       $s = HTTPRequest::fetchUrl($r[0]['poll'] . '?dfrn_id=' . $my_id . '&type=profile-check');
 
                        Logger::log("dfrn_poll: old profile returns " . $s, Logger::DATA);
 
@@ -499,20 +499,20 @@ function dfrn_poll_content(App $a)
 
                        // URL reply
                        if ($dfrn_version < 2.2) {
-                               $s = Network::fetchUrl($r[0]['poll']
-                                       . '?dfrn_id=' . $encrypted_id
-                                       . '&type=profile-check'
-                                       . '&dfrn_version=' . DFRN_PROTOCOL_VERSION
-                                       . '&challenge=' . $challenge
-                                       . '&sec=' . $sec
+                               $s = HTTPRequest::fetchUrl($r[0]['poll']
+                                                          . '?dfrn_id=' . $encrypted_id
+                                                          . '&type=profile-check'
+                                                          . '&dfrn_version=' . DFRN_PROTOCOL_VERSION
+                                                          . '&challenge=' . $challenge
+                                                          . '&sec=' . $sec
                                );
                        } else {
-                               $s = Network::post($r[0]['poll'], [
-                                       'dfrn_id' => $encrypted_id,
-                                       'type' => 'profile-check',
+                               $s = HTTPRequest::post($r[0]['poll'], [
+                                       'dfrn_id'      => $encrypted_id,
+                                       'type'         => 'profile-check',
                                        'dfrn_version' => DFRN_PROTOCOL_VERSION,
-                                       'challenge' => $challenge,
-                                       'sec' => $sec
+                                       'challenge'    => $challenge,
+                                       'sec'          => $sec
                                ])->getBody();
                        }
 
index f8e4c90236a8f2332068c55688af2bfaa26cea21..bdc407b0b14aaab13725b2b97ff7c8835f72e705 100644 (file)
@@ -29,8 +29,8 @@ use Friendica\Core\Logger;
 use Friendica\Core\Protocol;
 use Friendica\Core\Renderer;
 use Friendica\Core\Search;
-use Friendica\Core\System;
 use Friendica\Core\Session;
+use Friendica\Core\System;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Contact;
@@ -39,6 +39,7 @@ use Friendica\Model\Notify\Type;
 use Friendica\Model\Profile;
 use Friendica\Model\User;
 use Friendica\Module\Security\Login;
+use Friendica\Network\HTTPRequest;
 use Friendica\Network\Probe;
 use Friendica\Protocol\Activity;
 use Friendica\Util\DateTimeFormat;
@@ -203,7 +204,7 @@ function dfrn_request_post(App $a)
                                }
 
                                if (!empty($dfrn_request) && strlen($confirm_key)) {
-                                       Network::fetchUrl($dfrn_request . '?confirm_key=' . $confirm_key);
+                                       HTTPRequest::fetchUrl($dfrn_request . '?confirm_key=' . $confirm_key);
                                }
 
                                // (ignore reply, nothing we can do it failed)
index 747e0b2f0379f7211521b49b8707bcd1cb37ec31..4ec47c4cc6f1ed4dd55cef82840f7437d918b641 100644 (file)
@@ -27,7 +27,7 @@ use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\Profile;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\Proxy as ProxyUtils;
 
 /**
@@ -76,7 +76,7 @@ function match_content(App $a)
                $host = DI::baseUrl();
        }
 
-       $msearch_json = Network::post($host . '/msearch', $params)->getBody();
+       $msearch_json = HTTPRequest::post($host . '/msearch', $params)->getBody();
 
        $msearch = json_decode($msearch_json);
 
index 97367c3ea5f964ff0b9c25c5912770e90825caf5..523889332013fa038aa0587b62f5a5e337e49b86 100644 (file)
@@ -23,7 +23,7 @@ use Friendica\App;
 use Friendica\Core\Renderer;
 use Friendica\DI;
 use Friendica\Module\Security\Login;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\Strings;
 
 function oexchange_init(App $a) {
@@ -58,7 +58,7 @@ function oexchange_content(App $a) {
        $tags = ((!empty($_REQUEST['tags']))
                ? '&tags=' . urlencode(Strings::escapeTags(trim($_REQUEST['tags']))) : '');
 
-       $s = Network::fetchUrl(DI::baseUrl() . '/parse_url?url=' . $url . $title . $description . $tags);
+       $s = HTTPRequest::fetchUrl(DI::baseUrl() . '/parse_url?url=' . $url . $title . $description . $tags);
 
        if (!strlen($s)) {
                return;
index 751afcc7315a085408ec859fb6b5623d7bb1fdae..6b6c94987d1c5a4531387485b1a640585d70a24b 100644 (file)
@@ -23,7 +23,7 @@ use Friendica\App;
 use Friendica\Core\Protocol;
 use Friendica\DI;
 use Friendica\Model\Contact;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 
 function ostatus_subscribe_content(App $a)
 {
@@ -55,7 +55,7 @@ function ostatus_subscribe_content(App $a)
                $api = $contact['baseurl'] . '/api/';
 
                // Fetching friends
-               $curlResult = Network::curl($api . 'statuses/friends.json?screen_name=' . $contact['nick']);
+               $curlResult = HTTPRequest::curl($api . 'statuses/friends.json?screen_name=' . $contact['nick']);
 
                if (!$curlResult->isSuccess()) {
                        DI::pConfig()->delete($uid, 'ostatus', 'legacy_contact');
index 67610140b6985461a09484a8c0857d99d8a853c8..49e41246c9caab4fb400503e9b099bf4c7d525fc 100644 (file)
@@ -28,7 +28,7 @@ use Friendica\Content\PageInfo;
 use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\Core\System;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\ParseUrl;
 use Friendica\Util\Strings;
 
@@ -85,7 +85,7 @@ function parse_url_content(App $a)
        // Check if the URL is an image, video or audio file. If so format
        // the URL with the corresponding BBCode media tag
        // Fetch the header of the URL
-       $curlResponse = Network::curl($url, false, ['novalidate' => true, 'nobody' => true]);
+       $curlResponse = HTTPRequest::curl($url, false, ['novalidate' => true, 'nobody' => true]);
 
        if ($curlResponse->isSuccess()) {
                // Convert the header fields into an array
index 4d33503796d0f2eaaa5374fc1742df968c40ba6e..9403d3eb7fa64b0f3cff176425eb3a60efa938b9 100644 (file)
@@ -24,7 +24,7 @@ use Friendica\Core\Logger;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\PushSubscriber;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\Strings;
 
 function post_var($name) {
@@ -126,7 +126,7 @@ function pubsubhubbub_init(App $a) {
                $hub_callback = rtrim($hub_callback, ' ?&#');
                $separator = parse_url($hub_callback, PHP_URL_QUERY) === null ? '?' : '&';
 
-               $fetchResult = Network::fetchUrlFull($hub_callback . $separator . $params);
+               $fetchResult = HTTPRequest::fetchUrlFull($hub_callback . $separator . $params);
                $body = $fetchResult->getBody();
                $ret = $fetchResult->getReturnCode();
 
index d928e66df0c99f910063c73aa5f4af5e24baa441..deb97ca1c651b24dc9c442c857ca611bac79e817 100644 (file)
@@ -27,7 +27,7 @@ use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\Profile;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\Strings;
 
 function redir_init(App $a) {
@@ -171,7 +171,7 @@ function redir_magic($a, $cid, $url)
        }
 
        // Test for magic auth on the target system
-       $serverret = Network::curl($basepath . '/magic');
+       $serverret = HTTPRequest::curl($basepath . '/magic');
        if ($serverret->isSuccess()) {
                $separator = strpos($target_url, '?') ? '&' : '?';
                $target_url .= $separator . 'zrl=' . urlencode($visitor) . '&addr=' . urlencode($contact_url);
index db467a26305e498aacd22389717b0188f919684a..8cfb8ce0a129e5249a4a61240621db716d1373cf 100644 (file)
@@ -31,6 +31,7 @@ use Friendica\Core\Hook;
 use Friendica\Core\Renderer;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use Friendica\Util\ParseUrl;
@@ -95,7 +96,7 @@ class OEmbed
 
                        if (!in_array($ext, $noexts)) {
                                // try oembed autodiscovery
-                               $html_text = Network::fetchUrl($embedurl, false, 15, 'text/*');
+                               $html_text = HTTPRequest::fetchUrl($embedurl, false, 15, 'text/*');
                                if ($html_text) {
                                        $dom = @DOMDocument::loadHTML($html_text);
                                        if ($dom) {
@@ -103,14 +104,14 @@ class OEmbed
                                                $entries = $xpath->query("//link[@type='application/json+oembed']");
                                                foreach ($entries as $e) {
                                                        $href = $e->getAttributeNode('href')->nodeValue;
-                                                       $json_string = Network::fetchUrl($href . '&maxwidth=' . $a->videowidth);
+                                                       $json_string = HTTPRequest::fetchUrl($href . '&maxwidth=' . $a->videowidth);
                                                        break;
                                                }
 
                                                $entries = $xpath->query("//link[@type='text/json+oembed']");
                                                foreach ($entries as $e) {
                                                        $href = $e->getAttributeNode('href')->nodeValue;
-                                                       $json_string = Network::fetchUrl($href . '&maxwidth=' . $a->videowidth);
+                                                       $json_string = HTTPRequest::fetchUrl($href . '&maxwidth=' . $a->videowidth);
                                                        break;
                                                }
                                        }
index ce34d58ac506a2bb79885e2457081d7ff588c69a..f03ea6104b4c276e53fd88d9b0b14ec5e75ffe53 100644 (file)
@@ -38,12 +38,11 @@ use Friendica\Model\Contact;
 use Friendica\Model\Event;
 use Friendica\Model\Photo;
 use Friendica\Model\Tag;
-use Friendica\Network\Probe;
+use Friendica\Network\HTTPRequest;
 use Friendica\Object\Image;
 use Friendica\Protocol\Activity;
 use Friendica\Util\Images;
 use Friendica\Util\Map;
-use Friendica\Util\Network;
 use Friendica\Util\ParseUrl;
 use Friendica\Util\Proxy as ProxyUtils;
 use Friendica\Util\Strings;
@@ -487,7 +486,7 @@ class BBCode
                                        continue;
                                }
 
-                               $curlResult = Network::curl($mtch[1], true);
+                               $curlResult = HTTPRequest::curl($mtch[1], true);
                                if (!$curlResult->isSuccess()) {
                                        continue;
                                }
@@ -1108,7 +1107,7 @@ class BBCode
                                $text = "[url=" . $match[2] . ']' . $match[2] . "[/url]";
 
                                // if its not a picture then look if its a page that contains a picture link
-                               $body = Network::fetchUrl($match[1]);
+                               $body = HTTPRequest::fetchUrl($match[1]);
 
                                $doc = new DOMDocument();
                                @$doc->loadHTML($body);
@@ -1187,7 +1186,7 @@ class BBCode
                        }
 
                        // if its not a picture then look if its a page that contains a picture link
-                       $body = Network::fetchUrl($match[1]);
+                       $body = HTTPRequest::fetchUrl($match[1]);
 
                        $doc = new DOMDocument();
                        @$doc->loadHTML($body);
index 37b51d2ed953a68a56e391e5ed4242737ab962a3..7b6291ff39961a6802992f5ab09b48df6f811f8a 100644 (file)
@@ -27,8 +27,8 @@ use Friendica\Core\Config\Cache;
 use Friendica\Database\Database;
 use Friendica\Database\DBStructure;
 use Friendica\DI;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\Images;
-use Friendica\Util\Network;
 use Friendica\Util\Strings;
 
 /**
@@ -548,11 +548,11 @@ class Installer
                $help = "";
                $error_msg = "";
                if (function_exists('curl_init')) {
-                       $fetchResult = Network::fetchUrlFull($baseurl . "/install/testrewrite");
+                       $fetchResult = HTTPRequest::fetchUrlFull($baseurl . "/install/testrewrite");
 
                        $url = Strings::normaliseLink($baseurl . "/install/testrewrite");
                        if ($fetchResult->getReturnCode() != 204) {
-                               $fetchResult = Network::fetchUrlFull($url);
+                               $fetchResult = HTTPRequest::fetchUrlFull($url);
                        }
 
                        if ($fetchResult->getReturnCode() != 204) {
index e510f1868cc5f51c8ab5353aa4a3562493fc64eb..84b589bf2913eb7c842cd74cfb369dbe788c5cb6 100644 (file)
@@ -21,7 +21,7 @@
 
 namespace Friendica\Core;
 
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 
 /**
  * Manage compatibility with federated networks
@@ -123,7 +123,7 @@ class Protocol
                if (preg_match('=https?://(.*)/user/(.*)=ism', $profile_url, $matches)) {
                        $statusnet_host = $matches[1];
                        $statusnet_user = $matches[2];
-                       $UserData = Network::fetchUrl('http://' . $statusnet_host . '/api/users/show.json?user_id=' . $statusnet_user);
+                       $UserData = HTTPRequest::fetchUrl('http://' . $statusnet_host . '/api/users/show.json?user_id=' . $statusnet_user);
                        $user = json_decode($UserData);
                        if ($user) {
                                $matches[2] = $user->screen_name;
index edc88ffd7d4fa004c2ae8034b99d77ac5c8dafa7..26af05e746bd82fdb3b68d8e64ac30e00533ba05 100644 (file)
@@ -26,6 +26,7 @@ use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\GContact;
 use Friendica\Network\HTTPException;
+use Friendica\Network\HTTPRequest;
 use Friendica\Object\Search\ContactResult;
 use Friendica\Object\Search\ResultList;
 use Friendica\Util\Network;
@@ -123,7 +124,7 @@ class Search
                        $searchUrl .= '&page=' . $page;
                }
 
-               $resultJson = Network::fetchUrl($searchUrl, false, 0, 'application/json');
+               $resultJson = HTTPRequest::fetchUrl($searchUrl, false, 0, 'application/json');
 
                $results = json_decode($resultJson, true);
 
@@ -284,7 +285,7 @@ class Search
                        $return = GContact::searchByName($search, $mode);
                } else {
                        $p = $page > 1 ? 'p=' . $page : '';
-                       $curlResult = Network::curl(self::getGlobalDirectory() . '/search/people?' . $p . '&q=' . urlencode($search), false, ['accept_content' => 'application/json']);
+                       $curlResult = HTTPRequest::curl(self::getGlobalDirectory() . '/search/people?' . $p . '&q=' . urlencode($search), false, ['accept_content' => 'application/json']);
                        if ($curlResult->isSuccess()) {
                                $searchResult = json_decode($curlResult->getBody(), true);
                                if (!empty($searchResult['profiles'])) {
index fe3d17ad7f76b353e18f0a4430acc5f8fbde62df..a5c4226c47ab5c9949bf99b8630dc13ad37fdaa2 100644 (file)
@@ -25,8 +25,8 @@ use Friendica\Core;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Process;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\DateTimeFormat;
-use Friendica\Util\Network;
 
 /**
  * Contains the class for the worker background job processing
@@ -997,7 +997,7 @@ class Worker
                }
 
                $url = DI::baseUrl() . '/worker';
-               Network::fetchUrl($url, false, 1);
+               HTTPRequest::fetchUrl($url, false, 1);
        }
 
        /**
index 5966b8c25e2f80e7464db3bf5f2a57c6cac0bcfd..9fc72ac5a49d7780a1c4fef68976e323b0c9ef1c 100644 (file)
@@ -24,15 +24,13 @@ namespace Friendica\Model;
 use Friendica\Content\Text\HTML;
 use Friendica\Core\Logger;
 use Friendica\Database\DBA;
-use Friendica\DI;
 use Friendica\Network\Probe;
 use Friendica\Protocol\ActivityNamespace;
 use Friendica\Protocol\ActivityPub;
 use Friendica\Util\Crypto;
-use Friendica\Util\Network;
-use Friendica\Util\JsonLD;
 use Friendica\Util\DateTimeFormat;
-use Friendica\Util\Strings;
+use Friendica\Util\JsonLD;
+use Friendica\Util\Network;
 
 class APContact
 {
index 6a3c7da74cbada7e4fc0f399ab22c91f497af87d..a7cf837bdd5f8116f5e2a8553c050807506da5d5 100644 (file)
@@ -26,11 +26,12 @@ use DOMXPath;
 use Exception;
 use Friendica\Core\Logger;
 use Friendica\Core\Protocol;
-use Friendica\Core\System;
 use Friendica\Core\Search;
+use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Network\HTTPRequest;
 use Friendica\Network\Probe;
 use Friendica\Protocol\ActivityPub;
 use Friendica\Protocol\PortableContact;
@@ -537,7 +538,7 @@ class GContact
                $done[] = DI::baseUrl() . '/poco';
 
                if (strlen(DI::config()->get('system', 'directory'))) {
-                       $x = Network::fetchUrl(Search::getGlobalDirectory() . '/pubsites');
+                       $x = HTTPRequest::fetchUrl(Search::getGlobalDirectory() . '/pubsites');
                        if (!empty($x)) {
                                $j = json_decode($x);
                                if (!empty($j->entries)) {
@@ -845,7 +846,7 @@ class GContact
                        return false;
                }
 
-               $curlResult = Network::curl($gserver['noscrape'] . '/' . $data['nick']);
+               $curlResult = HTTPRequest::curl($gserver['noscrape'] . '/' . $data['nick']);
 
                if ($curlResult->isSuccess() && !empty($curlResult->getBody())) {
                        $noscrape = json_decode($curlResult->getBody(), true);
@@ -927,7 +928,7 @@ class GContact
        private static function updateFromFeed(array $data)
        {
                // Search for the newest entry in the feed
-               $curlResult = Network::curl($data['poll']);
+               $curlResult = HTTPRequest::curl($data['poll']);
                if (!$curlResult->isSuccess()) {
                        $fields = ['failed' => true, 'last_failure' => DateTimeFormat::utcNow()];
                        DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($data['url'])]);
@@ -1205,7 +1206,7 @@ class GContact
 
                $url = $server . '/main/statistics';
 
-               $curlResult = Network::curl($url);
+               $curlResult = HTTPRequest::curl($url);
                if (!$curlResult->isSuccess()) {
                        return false;
                }
index 8cad1aad08c5e21a7e55b13c28d11a333649e445..80ef201a8a134f6d57263efeddf77f2fabe34793 100644 (file)
@@ -23,20 +23,21 @@ namespace Friendica\Model;
 
 use DOMDocument;
 use DOMXPath;
+use Friendica\Core\Logger;
 use Friendica\Core\Protocol;
+use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Module\Register;
 use Friendica\Network\CurlResult;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
+use Friendica\Protocol\Diaspora;
+use Friendica\Protocol\PortableContact;
 use Friendica\Util\DateTimeFormat;
+use Friendica\Util\Network;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
-use Friendica\Core\Logger;
-use Friendica\Core\System;
-use Friendica\Protocol\PortableContact;
-use Friendica\Protocol\Diaspora;
 
 /**
  * This class handles GServer related functions
@@ -309,7 +310,7 @@ class GServer
 
                // When a nodeinfo is present, we don't need to dig further
                $xrd_timeout = DI::config()->get('system', 'xrd_timeout');
-               $curlResult = Network::curl($url . '/.well-known/nodeinfo', false, ['timeout' => $xrd_timeout]);
+               $curlResult = HTTPRequest::curl($url . '/.well-known/nodeinfo', false, ['timeout' => $xrd_timeout]);
                if ($curlResult->isTimeout()) {
                        self::setFailure($url);
                        return false;
@@ -342,7 +343,7 @@ class GServer
                                        $basedata = ['detection-method' => self::DETECT_MANUAL];
                                }
 
-                               $curlResult = Network::curl($baseurl, false, ['timeout' => $xrd_timeout]);
+                               $curlResult = HTTPRequest::curl($baseurl, false, ['timeout' => $xrd_timeout]);
                                if ($curlResult->isSuccess()) {
                                        $basedata = self::analyseRootHeader($curlResult, $basedata);
                                        $basedata = self::analyseRootBody($curlResult, $basedata, $baseurl);
@@ -498,7 +499,7 @@ class GServer
        {
                Logger::info('Discover relay data', ['server' => $server_url]);
 
-               $curlResult = Network::curl($server_url . '/.well-known/x-social-relay');
+               $curlResult = HTTPRequest::curl($server_url . '/.well-known/x-social-relay');
                if (!$curlResult->isSuccess()) {
                        return;
                }
@@ -579,7 +580,7 @@ class GServer
         */
        private static function fetchStatistics(string $url)
        {
-               $curlResult = Network::curl($url . '/statistics.json');
+               $curlResult = HTTPRequest::curl($url . '/statistics.json');
                if (!$curlResult->isSuccess()) {
                        return [];
                }
@@ -689,7 +690,8 @@ class GServer
         */
        private static function parseNodeinfo1(string $nodeinfo_url)
        {
-               $curlResult = Network::curl($nodeinfo_url);
+               $curlResult = HTTPRequest::curl($nodeinfo_url);
+
                if (!$curlResult->isSuccess()) {
                        return [];
                }
@@ -765,7 +767,7 @@ class GServer
         */
        private static function parseNodeinfo2(string $nodeinfo_url)
        {
-               $curlResult = Network::curl($nodeinfo_url);
+               $curlResult = HTTPRequest::curl($nodeinfo_url);
                if (!$curlResult->isSuccess()) {
                        return [];
                }
@@ -842,7 +844,7 @@ class GServer
         */
        private static function fetchSiteinfo(string $url, array $serverdata)
        {
-               $curlResult = Network::curl($url . '/siteinfo.json');
+               $curlResult = HTTPRequest::curl($url . '/siteinfo.json');
                if (!$curlResult->isSuccess()) {
                        return $serverdata;
                }
@@ -911,7 +913,7 @@ class GServer
        private static function validHostMeta(string $url)
        {
                $xrd_timeout = DI::config()->get('system', 'xrd_timeout');
-               $curlResult = Network::curl($url . '/.well-known/host-meta', false, ['timeout' => $xrd_timeout]);
+               $curlResult = HTTPRequest::curl($url . '/.well-known/host-meta', false, ['timeout' => $xrd_timeout]);
                if (!$curlResult->isSuccess()) {
                        return false;
                }
@@ -1007,7 +1009,7 @@ class GServer
        {
                $serverdata['poco'] = '';
 
-               $curlResult = Network::curl($url. '/poco');
+               $curlResult = HTTPRequest::curl($url . '/poco');
                if (!$curlResult->isSuccess()) {
                        return $serverdata;
                }
@@ -1037,7 +1039,7 @@ class GServer
         */
        public static function checkMastodonDirectory(string $url, array $serverdata)
        {
-               $curlResult = Network::curl($url . '/api/v1/directory?limit=1');
+               $curlResult = HTTPRequest::curl($url . '/api/v1/directory?limit=1');
                if (!$curlResult->isSuccess()) {
                        return $serverdata;
                }
@@ -1064,7 +1066,8 @@ class GServer
         */
        private static function detectNextcloud(string $url, array $serverdata)
        {
-               $curlResult = Network::curl($url . '/status.php');
+               $curlResult = HTTPRequest::curl($url . '/status.php');
+
                if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
                        return $serverdata;
                }
@@ -1097,7 +1100,8 @@ class GServer
         */
        private static function detectMastodonAlikes(string $url, array $serverdata)
        {
-               $curlResult = Network::curl($url . '/api/v1/instance');
+               $curlResult = HTTPRequest::curl($url . '/api/v1/instance');
+
                if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
                        return $serverdata;
                }
@@ -1162,7 +1166,7 @@ class GServer
         */
        private static function detectHubzilla(string $url, array $serverdata)
        {
-               $curlResult = Network::curl($url . '/api/statusnet/config.json');
+               $curlResult = HTTPRequest::curl($url . '/api/statusnet/config.json');
                if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
                        return $serverdata;
                }
@@ -1260,7 +1264,7 @@ class GServer
        private static function detectGNUSocial(string $url, array $serverdata)
        {
                // Test for GNU Social
-               $curlResult = Network::curl($url . '/api/gnusocial/version.json');
+               $curlResult = HTTPRequest::curl($url . '/api/gnusocial/version.json');
                if ($curlResult->isSuccess() && ($curlResult->getBody() != '{"error":"not implemented"}') &&
                        ($curlResult->getBody() != '') && (strlen($curlResult->getBody()) < 30)) {
                        $serverdata['platform'] = 'gnusocial';
@@ -1278,7 +1282,7 @@ class GServer
                }
 
                // Test for Statusnet
-               $curlResult = Network::curl($url . '/api/statusnet/version.json');
+               $curlResult = HTTPRequest::curl($url . '/api/statusnet/version.json');
                if ($curlResult->isSuccess() && ($curlResult->getBody() != '{"error":"not implemented"}') &&
                        ($curlResult->getBody() != '') && (strlen($curlResult->getBody()) < 30)) {
 
@@ -1314,9 +1318,9 @@ class GServer
         */
        private static function detectFriendica(string $url, array $serverdata)
        {
-               $curlResult = Network::curl($url . '/friendica/json');
+               $curlResult = HTTPRequest::curl($url . '/friendica/json');
                if (!$curlResult->isSuccess()) {
-                       $curlResult = Network::curl($url . '/friendika/json');
+                       $curlResult = HTTPRequest::curl($url . '/friendika/json');
                        $friendika = true;
                        $platform = 'Friendika';
                } else {
@@ -1631,7 +1635,7 @@ class GServer
                $protocols = ['activitypub', 'diaspora', 'dfrn', 'ostatus'];
                foreach ($protocols as $protocol) {
                        $query = '{nodes(protocol:"' . $protocol . '"){host}}';
-                       $curlResult = Network::fetchUrl('https://the-federation.info/graphql?query=' . urlencode($query));
+                       $curlResult = HTTPRequest::fetchUrl('https://the-federation.info/graphql?query=' . urlencode($query));
                        if (!empty($curlResult)) {
                                $data = json_decode($curlResult, true);
                                if (!empty($data['data']['nodes'])) {
@@ -1649,7 +1653,8 @@ class GServer
                if (!empty($accesstoken)) {
                        $api = 'https://instances.social/api/1.0/instances/list?count=0';
                        $header = ['Authorization: Bearer '.$accesstoken];
-                       $curlResult = Network::curl($api, false, ['headers' => $header]);
+                       $curlResult = HTTPRequest::curl($api, false, ['headers' => $header]);
+
                        if ($curlResult->isSuccess()) {
                                $servers = json_decode($curlResult->getBody(), true);
 
index 9d8b5611f7f8b5f2543b0cc74e92521be7a6a0ba..125718bf50f76043d225cf26773b390f23ba50af 100644 (file)
@@ -28,10 +28,10 @@ use Friendica\Database\DBA;
 use Friendica\Database\DBStructure;
 use Friendica\DI;
 use Friendica\Model\Storage\SystemResource;
+use Friendica\Network\HTTPRequest;
 use Friendica\Object\Image;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Images;
-use Friendica\Util\Network;
 use Friendica\Util\Security;
 use Friendica\Util\Strings;
 
@@ -421,7 +421,7 @@ class Photo
 
                $filename = basename($image_url);
                if (!empty($image_url)) {
-                       $ret = Network::curl($image_url, true);
+                       $ret = HTTPRequest::curl($image_url, true);
                        $img_str = $ret->getBody();
                        $type = $ret->getContentType();
                } else {
index 2fcbde0779e8d98b72d0ff8b58c2ccd2f3fcf069..c8fd9d029cac67261837eccfd2d4c5f0c7887a0c 100644 (file)
@@ -33,6 +33,7 @@ use Friendica\Core\Session;
 use Friendica\Core\System;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Network\HTTPRequest;
 use Friendica\Protocol\Activity;
 use Friendica\Protocol\Diaspora;
 use Friendica\Util\DateTimeFormat;
@@ -737,7 +738,7 @@ class Profile
                        $magic_path = $basepath . '/magic' . '?owa=1&dest=' . $dest . '&' . $addr_request;
 
                        // We have to check if the remote server does understand /magic without invoking something
-                       $serverret = Network::curl($basepath . '/magic');
+                       $serverret = HTTPRequest::curl($basepath . '/magic');
                        if ($serverret->isSuccess()) {
                                Logger::log('Doing magic auth for visitor ' . $my_url . ' to ' . $magic_path, Logger::DEBUG);
                                System::externalRedirect($magic_path);
index b4ada344e16deaa659569511d7f64333776947e6..fda105687d2f240cafcbdbd8b51db817cbac0b84 100644 (file)
@@ -34,6 +34,7 @@ use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\TwoFactor\AppSpecificPassword;
 use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPRequest;
 use Friendica\Object\Image;
 use Friendica\Util\Crypto;
 use Friendica\Util\DateTimeFormat;
@@ -823,7 +824,7 @@ class User
                        $photo_failure = false;
 
                        $filename = basename($photo);
-                       $curlResult = Network::curl($photo, true);
+                       $curlResult = HTTPRequest::curl($photo, true);
                        if ($curlResult->isSuccess()) {
                                $img_str = $curlResult->getBody();
                                $type = $curlResult->getContentType();
index c19b7f7f87f7ff1e004ca09c6841775abf12228a..6dcef2ea4339da7914344cd09ff5159fc922e64d 100644 (file)
@@ -31,12 +31,10 @@ use Friendica\Database\DBStructure;
 use Friendica\DI;
 use Friendica\Model\Register;
 use Friendica\Module\BaseAdmin;
-use Friendica\Module\Update\Profile;
 use Friendica\Network\HTTPException\InternalServerErrorException;
-use Friendica\Render\FriendicaSmarty;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\ConfigFileLoader;
 use Friendica\Util\DateTimeFormat;
-use Friendica\Util\Network;
 
 class Summary extends BaseAdmin
 {
@@ -249,7 +247,7 @@ class Summary extends BaseAdmin
        private static function checkSelfHostMeta()
        {
                // Fetch the host-meta to check if this really is a vital server
-               return Network::curl(DI::baseUrl()->get() . '/.well-known/host-meta')->isSuccess();
+               return HTTPRequest::curl(DI::baseUrl()->get() . '/.well-known/host-meta')->isSuccess();
        }
 
 }
index e969de9cc3889a419bcaf0db3195e6aedfeb9162..6214b49dd5296a803c6175a9759181d47be6de53 100644 (file)
@@ -25,8 +25,8 @@ use Friendica\BaseModule;
 use Friendica\Core\Renderer;
 use Friendica\DI;
 use Friendica\Model;
+use Friendica\Network\HTTPRequest;
 use Friendica\Protocol;
-use Friendica\Util\Network;
 
 /**
  * Tests a given feed of a contact
@@ -49,7 +49,7 @@ class Feed extends BaseModule
 
                        $contact = Model\Contact::getByURLForUser($url, local_user(), false);
 
-                       $xml = Network::fetchUrl($contact['poll']);
+                       $xml = HTTPRequest::fetchUrl($contact['poll']);
 
                        $import_result = Protocol\Feed::import($xml);
 
index f27ffeac5830472c842627a006701c06e98643ce..b65159585b85824e3f6b2dec7b72c92081724e56 100644 (file)
@@ -27,8 +27,8 @@ use Friendica\Core\System;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Contact;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\HTTPSignature;
-use Friendica\Util\Network;
 use Friendica\Util\Strings;
 
 /**
@@ -101,7 +101,7 @@ class Magic extends BaseModule
                                );
 
                                // Try to get an authentication token from the other instance.
-                               $curlResult = Network::curl($basepath . '/owa', false, ['headers' => $headers]);
+                               $curlResult = HTTPRequest::curl($basepath . '/owa', false, ['headers' => $headers]);
 
                                if ($curlResult->isSuccess()) {
                                        $j = json_decode($curlResult->getBody(), true);
diff --git a/src/Network/HTTPRequest.php b/src/Network/HTTPRequest.php
new file mode 100644 (file)
index 0000000..6986a93
--- /dev/null
@@ -0,0 +1,364 @@
+<?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU APGL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Network;
+
+use Friendica\Core\Logger;
+use Friendica\Core\System;
+use Friendica\DI;
+use Friendica\Util\Network;
+
+/**
+ * Performs HTTP requests to a given URL
+ */
+class HTTPRequest
+{
+       /**
+        * fetches an URL.
+        *
+        * @param string  $url       URL to fetch
+        * @param bool    $binary    default false
+        *                           TRUE if asked to return binary results (file download)
+        * @param array   $opts      (optional parameters) assoziative array with:
+        *                           'accept_content' => supply Accept: header with 'accept_content' as the value
+        *                           'timeout' => int Timeout in seconds, default system config value or 60 seconds
+        *                           'http_auth' => username:password
+        *                           'novalidate' => do not validate SSL certs, default is to validate using our CA list
+        *                           'nobody' => only return the header
+        *                           'cookiejar' => path to cookie jar file
+        *                           'header' => header array
+        * @param int     $redirects The recursion counter for internal use - default 0
+        *
+        * @return CurlResult
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        */
+       public static function curl(string $url, bool $binary = false, array $opts = [], int &$redirects = 0)
+       {
+               $stamp1 = microtime(true);
+
+               $a = DI::app();
+
+               if (strlen($url) > 1000) {
+                       Logger::log('URL is longer than 1000 characters. Callstack: ' . System::callstack(20), Logger::DEBUG);
+                       return CurlResult::createErrorCurl(substr($url, 0, 200));
+               }
+
+               $parts2     = [];
+               $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           = Network::unparseURL($parts);
+
+               if (Network::isUrlBlocked($url)) {
+                       Logger::log('domain of ' . $url . ' is blocked', Logger::DATA);
+                       return CurlResult::createErrorCurl($url);
+               }
+
+               $ch = @curl_init($url);
+
+               if (($redirects > 8) || (!$ch)) {
+                       return CurlResult::createErrorCurl($url);
+               }
+
+               @curl_setopt($ch, CURLOPT_HEADER, true);
+
+               if (!empty($opts['cookiejar'])) {
+                       curl_setopt($ch, CURLOPT_COOKIEJAR, $opts["cookiejar"]);
+                       curl_setopt($ch, CURLOPT_COOKIEFILE, $opts["cookiejar"]);
+               }
+
+               // These settings aren't needed. We're following the location already.
+               //      @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
+               //      @curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
+
+               if (!empty($opts['accept_content'])) {
+                       curl_setopt(
+                               $ch,
+                               CURLOPT_HTTPHEADER,
+                               ['Accept: ' . $opts['accept_content']]
+                       );
+               }
+
+               if (!empty($opts['header'])) {
+                       curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['header']);
+               }
+
+               @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+               @curl_setopt($ch, CURLOPT_USERAGENT, $a->getUserAgent());
+
+               $range = intval(DI::config()->get('system', 'curl_range_bytes', 0));
+
+               if ($range > 0) {
+                       @curl_setopt($ch, CURLOPT_RANGE, '0-' . $range);
+               }
+
+               // Without this setting it seems as if some webservers send compressed content
+               // This seems to confuse curl so that it shows this uncompressed.
+               /// @todo  We could possibly set this value to "gzip" or something similar
+               curl_setopt($ch, CURLOPT_ENCODING, '');
+
+               if (!empty($opts['headers'])) {
+                       @curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['headers']);
+               }
+
+               if (!empty($opts['nobody'])) {
+                       @curl_setopt($ch, CURLOPT_NOBODY, $opts['nobody']);
+               }
+
+               if (!empty($opts['timeout'])) {
+                       @curl_setopt($ch, CURLOPT_TIMEOUT, $opts['timeout']);
+               } else {
+                       $curl_time = DI::config()->get('system', 'curl_timeout', 60);
+                       @curl_setopt($ch, CURLOPT_TIMEOUT, intval($curl_time));
+               }
+
+               // by default we will allow self-signed certs
+               // but you can override this
+
+               $check_cert = DI::config()->get('system', 'verifyssl');
+               @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
+
+               if ($check_cert) {
+                       @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
+               }
+
+               $proxy = DI::config()->get('system', 'proxy');
+
+               if (strlen($proxy)) {
+                       @curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
+                       @curl_setopt($ch, CURLOPT_PROXY, $proxy);
+                       $proxyuser = @DI::config()->get('system', 'proxyuser');
+
+                       if (strlen($proxyuser)) {
+                               @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuser);
+                       }
+               }
+
+               if (DI::config()->get('system', 'ipv4_resolve', false)) {
+                       curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
+               }
+
+               if ($binary) {
+                       @curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
+               }
+
+               // don't let curl abort the entire application
+               // if it throws any errors.
+
+               $s         = @curl_exec($ch);
+               $curl_info = @curl_getinfo($ch);
+
+               // Special treatment for HTTP Code 416
+               // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/416
+               if (($curl_info['http_code'] == 416) && ($range > 0)) {
+                       @curl_setopt($ch, CURLOPT_RANGE, '');
+                       $s         = @curl_exec($ch);
+                       $curl_info = @curl_getinfo($ch);
+               }
+
+               $curlResponse = new CurlResult($url, $s, $curl_info, curl_errno($ch), curl_error($ch));
+
+               if ($curlResponse->isRedirectUrl()) {
+                       $redirects++;
+                       Logger::log('curl: redirect ' . $url . ' to ' . $curlResponse->getRedirectUrl());
+                       @curl_close($ch);
+                       return self::curl($curlResponse->getRedirectUrl(), $binary, $opts, $redirects);
+               }
+
+               @curl_close($ch);
+
+               DI::profiler()->saveTimestamp($stamp1, 'network', System::callstack());
+
+               return $curlResponse;
+       }
+
+       /**
+        * Send POST request to $url
+        *
+        * @param string  $url       URL to post
+        * @param mixed   $params    array of POST variables
+        * @param array   $headers   HTTP headers
+        * @param int     $redirects Recursion counter for internal use - default = 0
+        * @param int     $timeout   The timeout in seconds, default system config value or 60 seconds
+        *
+        * @return CurlResult The content
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        */
+       public static function post(string $url, $params, array $headers = [], int $timeout = 0, int &$redirects = 0)
+       {
+               $stamp1 = microtime(true);
+
+               if (Network::isUrlBlocked($url)) {
+                       Logger::log('post_url: domain of ' . $url . ' is blocked', Logger::DATA);
+                       return CurlResult::createErrorCurl($url);
+               }
+
+               $a  = DI::app();
+               $ch = curl_init($url);
+
+               if (($redirects > 8) || (!$ch)) {
+                       return CurlResult::createErrorCurl($url);
+               }
+
+               Logger::log('post_url: start ' . $url, Logger::DATA);
+
+               curl_setopt($ch, CURLOPT_HEADER, true);
+               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+               curl_setopt($ch, CURLOPT_POST, 1);
+               curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
+               curl_setopt($ch, CURLOPT_USERAGENT, $a->getUserAgent());
+
+               if (DI::config()->get('system', 'ipv4_resolve', false)) {
+                       curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
+               }
+
+               if (intval($timeout)) {
+                       curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
+               } else {
+                       $curl_time = DI::config()->get('system', 'curl_timeout', 60);
+                       curl_setopt($ch, CURLOPT_TIMEOUT, intval($curl_time));
+               }
+
+               if (!empty($headers)) {
+                       curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+               }
+
+               $check_cert = DI::config()->get('system', 'verifyssl');
+               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
+
+               if ($check_cert) {
+                       @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
+               }
+
+               $proxy = DI::config()->get('system', 'proxy');
+
+               if (strlen($proxy)) {
+                       curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
+                       curl_setopt($ch, CURLOPT_PROXY, $proxy);
+                       $proxyuser = DI::config()->get('system', 'proxyuser');
+                       if (strlen($proxyuser)) {
+                               curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuser);
+                       }
+               }
+
+               // don't let curl abort the entire application
+               // if it throws any errors.
+
+               $s = @curl_exec($ch);
+
+               $curl_info = curl_getinfo($ch);
+
+               $curlResponse = new CurlResult($url, $s, $curl_info, curl_errno($ch), curl_error($ch));
+
+               if ($curlResponse->isRedirectUrl()) {
+                       $redirects++;
+                       Logger::log('post_url: redirect ' . $url . ' to ' . $curlResponse->getRedirectUrl());
+                       curl_close($ch);
+                       return self::post($curlResponse->getRedirectUrl(), $params, $headers, $redirects, $timeout);
+               }
+
+               curl_close($ch);
+
+               DI::profiler()->saveTimestamp($stamp1, 'network', System::callstack());
+
+               // Very old versions of Lighttpd don't like the "Expect" header, so we remove it when needed
+               if ($curlResponse->getReturnCode() == 417) {
+                       $redirects++;
+
+                       if (empty($headers)) {
+                               $headers = ['Expect:'];
+                       } else {
+                               if (!in_array('Expect:', $headers)) {
+                                       array_push($headers, 'Expect:');
+                               }
+                       }
+                       Logger::info('Server responds with 417, applying workaround', ['url' => $url]);
+                       return self::post($url, $params, $headers, $redirects, $timeout);
+               }
+
+               Logger::log('post_url: end ' . $url, Logger::DATA);
+
+               return $curlResponse;
+       }
+
+       /**
+        * 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.
+        *
+        * @param string  $url            URL to fetch
+        * @param bool    $binary         default false
+        *                                TRUE if asked to return binary results (file download)
+        * @param int     $timeout        Timeout in seconds, default system config value or 60 seconds
+        * @param string  $accept_content supply Accept: header with 'accept_content' as the value
+        * @param string  $cookiejar      Path to cookie jar file
+        * @param int     $redirects      The recursion counter for internal use - default 0
+        *
+        * @return string The fetched content
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        */
+       public static function fetchUrl(string $url, bool $binary = false, int $timeout = 0, string $accept_content = '', string $cookiejar = '', int &$redirects = 0)
+       {
+               $ret = self::fetchUrlFull($url, $binary, $timeout, $accept_content, $cookiejar, $redirects);
+
+               return $ret->getBody();
+       }
+
+       /**
+        * Curl wrapper with array of return values.
+        *
+        * Inner workings and parameters are the same as @ref fetchUrl but returns an array with
+        * all the information collected during the fetch.
+        *
+        * @param string  $url            URL to fetch
+        * @param bool    $binary         default false
+        *                                TRUE if asked to return binary results (file download)
+        * @param int     $timeout        Timeout in seconds, default system config value or 60 seconds
+        * @param string  $accept_content supply Accept: header with 'accept_content' as the value
+        * @param string  $cookiejar      Path to cookie jar file
+        * @param int     $redirects      The recursion counter for internal use - default 0
+        *
+        * @return CurlResult With all relevant information, 'body' contains the actual fetched content.
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        */
+       public static function fetchUrlFull(string $url, bool $binary = false, int $timeout = 0, string $accept_content = '', string $cookiejar = '', int &$redirects = 0)
+       {
+               return self::curl(
+                       $url,
+                       $binary,
+                       [
+                               'timeout'        => $timeout,
+                               'accept_content' => $accept_content,
+                               'cookiejar'      => $cookiejar
+                       ],
+                       $redirects
+               );
+       }
+}
index 920dac47e6771911002a8fefc4f9546855cdc388..dadd794fe630ac8781e1f6124d28577e7b4f6e26 100644 (file)
@@ -166,7 +166,7 @@ class Probe
                Logger::info('Probing', ['host' => $host, 'ssl_url' => $ssl_url, 'url' => $url, 'callstack' => System::callstack(20)]);
                $xrd = null;
 
-               $curlResult = Network::curl($ssl_url, false, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']);
+               $curlResult = HTTPRequest::curl($ssl_url, false, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']);
                $ssl_connection_error = ($curlResult->getErrorNumber() == CURLE_COULDNT_CONNECT) || ($curlResult->getReturnCode() == 0);
                if ($curlResult->isSuccess()) {
                        $xml = $curlResult->getBody();
@@ -183,7 +183,7 @@ class Probe
                }
 
                if (!is_object($xrd) && !empty($url)) {
-                       $curlResult = Network::curl($url, false, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']);
+                       $curlResult = HTTPRequest::curl($url, false, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']);
                        $connection_error = ($curlResult->getErrorNumber() == CURLE_COULDNT_CONNECT) || ($curlResult->getReturnCode() == 0);
                        if ($curlResult->isTimeout()) {
                                Logger::info('Probing timeout', ['url' => $url]);
@@ -427,7 +427,7 @@ class Probe
         */
        private static function getHideStatus($url)
        {
-               $curlResult = Network::curl($url);
+               $curlResult = HTTPRequest::curl($url);
                if (!$curlResult->isSuccess()) {
                        return false;
                }
@@ -841,7 +841,7 @@ class Probe
 
        public static function pollZot($url, $data)
        {
-               $curlResult = Network::curl($url);
+               $curlResult = HTTPRequest::curl($url);
                if ($curlResult->isTimeout()) {
                        return $data;
                }
@@ -938,7 +938,7 @@ class Probe
        {
                $xrd_timeout = DI::config()->get('system', 'xrd_timeout', 20);
 
-               $curlResult = Network::curl($url, false, ['timeout' => $xrd_timeout, 'accept_content' => $type]);
+               $curlResult = HTTPRequest::curl($url, false, ['timeout' => $xrd_timeout, 'accept_content' => $type]);
                if ($curlResult->isTimeout()) {
                        self::$istimeout = true;
                        return [];
@@ -1007,7 +1007,7 @@ class Probe
         */
        private static function pollNoscrape($noscrape_url, $data)
        {
-               $curlResult = Network::curl($noscrape_url);
+               $curlResult = HTTPRequest::curl($noscrape_url);
                if ($curlResult->isTimeout()) {
                        self::$istimeout = true;
                        return [];
@@ -1265,7 +1265,7 @@ class Probe
         */
        private static function pollHcard($hcard_url, $data, $dfrn = false)
        {
-               $curlResult = Network::curl($hcard_url);
+               $curlResult = HTTPRequest::curl($hcard_url);
                if ($curlResult->isTimeout()) {
                        self::$istimeout = true;
                        return [];
@@ -1519,7 +1519,7 @@ class Probe
                                                        $pubkey = substr($pubkey, 5);
                                                }
                                        } elseif (Strings::normaliseLink($pubkey) == 'http://') {
-                                               $curlResult = Network::curl($pubkey);
+                                               $curlResult = HTTPRequest::curl($pubkey);
                                                if ($curlResult->isTimeout()) {
                                                        self::$istimeout = true;
                                                        return $short ? false : [];
@@ -1552,7 +1552,7 @@ class Probe
                }
 
                // Fetch all additional data from the feed
-               $curlResult = Network::curl($data["poll"]);
+               $curlResult = HTTPRequest::curl($data["poll"]);
                if ($curlResult->isTimeout()) {
                        self::$istimeout = true;
                        return [];
@@ -1604,7 +1604,7 @@ class Probe
         */
        private static function pumpioProfileData($profile_link)
        {
-               $curlResult = Network::curl($profile_link);
+               $curlResult = HTTPRequest::curl($profile_link);
                if (!$curlResult->isSuccess()) {
                        return [];
                }
@@ -1835,7 +1835,7 @@ class Probe
         */
        private static function feed($url, $probe = true)
        {
-               $curlResult = Network::curl($url);
+               $curlResult = HTTPRequest::curl($url);
                if ($curlResult->isTimeout()) {
                        self::$istimeout = true;
                        return [];
index 2f8c2f419e5d0cc5e87d453b561b7e0016ddc717..24c6250a41f28424827d2491cc5987127ba1e9f3 100644 (file)
 
 namespace Friendica\Protocol;
 
-use Friendica\Util\JsonLD;
-use Friendica\Util\Network;
 use Friendica\Core\Protocol;
 use Friendica\Model\APContact;
 use Friendica\Model\User;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\HTTPSignature;
+use Friendica\Util\JsonLD;
 
 /**
  * ActivityPub Protocol class
@@ -93,7 +93,7 @@ class ActivityPub
                        return HTTPSignature::fetch($url, $uid);
                }
 
-               $curlResult = Network::curl($url, false, ['accept_content' => 'application/activity+json, application/ld+json']);
+               $curlResult = HTTPRequest::curl($url, false, ['accept_content' => 'application/activity+json, application/ld+json']);
                if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
                        return false;
                }
index b7c3204b796de9c01281320b9d6e61d2e6dc313d..21adc58cc05520172d721bc704655333f7ff9f83 100644 (file)
@@ -43,6 +43,7 @@ use Friendica\Model\Post\Category;
 use Friendica\Model\Profile;
 use Friendica\Model\Tag;
 use Friendica\Model\User;
+use Friendica\Network\HTTPRequest;
 use Friendica\Network\Probe;
 use Friendica\Util\Crypto;
 use Friendica\Util\DateTimeFormat;
@@ -1194,7 +1195,7 @@ class DFRN
 
                Logger::log('dfrn_deliver: ' . $url);
 
-               $curlResult = Network::curl($url);
+               $curlResult = HTTPRequest::curl($url);
 
                if ($curlResult->isTimeout()) {
                        return -2; // timed out
@@ -1343,7 +1344,7 @@ class DFRN
 
                Logger::debug('dfrn_deliver', ['post' => $postvars]);
 
-               $postResult = Network::post($contact['notify'], $postvars);
+               $postResult = HTTPRequest::post($contact['notify'], $postvars);
 
                $xml = $postResult->getBody();
 
@@ -1440,7 +1441,7 @@ class DFRN
 
                $content_type = ($public_batch ? "application/magic-envelope+xml" : "application/json");
 
-               $postResult = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]);
+               $postResult = HTTPRequest::post($dest_url, $envelope, ["Content-Type: " . $content_type]);
                $xml = $postResult->getBody();
 
                $curl_stat = $postResult->getReturnCode();
index bd99b361e345b8a767e7597ddbf34d6cb871b315..46d2bc1d4ac9c7a0b75cdf9cbaa132b36dee7e72 100644 (file)
@@ -41,6 +41,7 @@ use Friendica\Model\Mail;
 use Friendica\Model\Post;
 use Friendica\Model\Tag;
 use Friendica\Model\User;
+use Friendica\Network\HTTPRequest;
 use Friendica\Network\Probe;
 use Friendica\Util\Crypto;
 use Friendica\Util\DateTimeFormat;
@@ -1379,7 +1380,7 @@ class Diaspora
 
                Logger::log("Fetch post from ".$source_url, Logger::DEBUG);
 
-               $envelope = Network::fetchUrl($source_url);
+               $envelope = HTTPRequest::fetchUrl($source_url);
                if ($envelope) {
                        Logger::log("Envelope was fetched.", Logger::DEBUG);
                        $x = self::verifyMagicEnvelope($envelope);
@@ -3260,7 +3261,7 @@ class Diaspora
                if (!intval(DI::config()->get("system", "diaspora_test"))) {
                        $content_type = (($public_batch) ? "application/magic-envelope+xml" : "application/json");
 
-                       $postResult = Network::post($dest_url."/", $envelope, ["Content-Type: ".$content_type]);
+                       $postResult = HTTPRequest::post($dest_url . "/", $envelope, ["Content-Type: " . $content_type]);
                        $return_code = $postResult->getReturnCode();
                } else {
                        Logger::log("test_mode");
index 9a52476b569b47ee0d010acaa84e6f05367235db..779c99358e9c30f273d951e89f87d267fcadd08d 100644 (file)
@@ -39,10 +39,10 @@ use Friendica\Model\Item;
 use Friendica\Model\ItemURI;
 use Friendica\Model\Tag;
 use Friendica\Model\User;
+use Friendica\Network\HTTPRequest;
 use Friendica\Network\Probe;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Images;
-use Friendica\Util\Network;
 use Friendica\Util\Proxy as ProxyUtils;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
@@ -756,7 +756,7 @@ class OStatus
 
                self::$conv_list[$conversation] = true;
 
-               $curlResult = Network::curl($conversation, false, ['accept_content' => 'application/atom+xml, text/html']);
+               $curlResult = HTTPRequest::curl($conversation, false, ['accept_content' => 'application/atom+xml, text/html']);
 
                if (!$curlResult->isSuccess()) {
                        return;
@@ -785,7 +785,7 @@ class OStatus
                                        }
                                }
                                if ($file != '') {
-                                       $conversation_atom = Network::curl($attribute['href']);
+                                       $conversation_atom = HTTPRequest::curl($attribute['href']);
 
                                        if ($conversation_atom->isSuccess()) {
                                                $xml = $conversation_atom->getBody();
@@ -902,7 +902,7 @@ class OStatus
                        return;
                }
 
-               $curlResult = Network::curl($self);
+               $curlResult = HTTPRequest::curl($self);
 
                if (!$curlResult->isSuccess()) {
                        return;
@@ -949,7 +949,7 @@ class OStatus
                }
 
                $stored = false;
-               $curlResult = Network::curl($related, false, ['accept_content' => 'application/atom+xml, text/html']);
+               $curlResult = HTTPRequest::curl($related, false, ['accept_content' => 'application/atom+xml, text/html']);
 
                if (!$curlResult->isSuccess()) {
                        return;
@@ -980,7 +980,7 @@ class OStatus
                                        }
                                }
                                if ($atom_file != '') {
-                                       $curlResult = Network::curl($atom_file);
+                                       $curlResult = HTTPRequest::curl($atom_file);
 
                                        if ($curlResult->isSuccess()) {
                                                Logger::log('Fetched XML for URI ' . $related_uri, Logger::DEBUG);
@@ -992,7 +992,7 @@ class OStatus
 
                // Workaround for older GNU Social servers
                if (($xml == '') && strstr($related, '/notice/')) {
-                       $curlResult = Network::curl(str_replace('/notice/', '/api/statuses/show/', $related).'.atom');
+                       $curlResult = HTTPRequest::curl(str_replace('/notice/', '/api/statuses/show/', $related) . '.atom');
 
                        if ($curlResult->isSuccess()) {
                                Logger::log('GNU Social workaround to fetch XML for URI ' . $related_uri, Logger::DEBUG);
@@ -1003,7 +1003,7 @@ class OStatus
                // Even more worse workaround for GNU Social ;-)
                if ($xml == '') {
                        $related_guess = self::convertHref($related_uri);
-                       $curlResult = Network::curl(str_replace('/notice/', '/api/statuses/show/', $related_guess).'.atom');
+                       $curlResult = HTTPRequest::curl(str_replace('/notice/', '/api/statuses/show/', $related_guess) . '.atom');
 
                        if ($curlResult->isSuccess()) {
                                Logger::log('GNU Social workaround 2 to fetch XML for URI ' . $related_uri, Logger::DEBUG);
index d66676cac5699eb0fac6e802bd5717a5685a3535..f2ad51070d5d08fe4087571d55c1e93783c0eee3 100644 (file)
@@ -30,8 +30,8 @@ use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\GContact;
 use Friendica\Model\GServer;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\DateTimeFormat;
-use Friendica\Util\Network;
 use Friendica\Util\Strings;
 
 /**
@@ -103,7 +103,7 @@ class PortableContact
 
                Logger::log('load: ' . $url, Logger::DEBUG);
 
-               $fetchresult = Network::fetchUrlFull($url);
+               $fetchresult = HTTPRequest::fetchUrlFull($url);
                $s = $fetchresult->getBody();
 
                Logger::log('load: returns ' . $s, Logger::DATA);
@@ -251,7 +251,7 @@ class PortableContact
         */
        private static function fetchServerlist($poco)
        {
-               $curlResult = Network::curl($poco . "/@server");
+               $curlResult = HTTPRequest::curl($poco . "/@server");
 
                if (!$curlResult->isSuccess()) {
                        return;
@@ -291,7 +291,7 @@ class PortableContact
 
                Logger::info("Fetch all users from the server " . $server["url"]);
 
-               $curlResult = Network::curl($url);
+               $curlResult = HTTPRequest::curl($url);
 
                if ($curlResult->isSuccess() && !empty($curlResult->getBody())) {
                        $data = json_decode($curlResult->getBody(), true);
@@ -314,7 +314,7 @@ class PortableContact
 
                                $success = false;
 
-                               $curlResult = Network::curl($url);
+                               $curlResult = HTTPRequest::curl($url);
 
                                if ($curlResult->isSuccess() && !empty($curlResult->getBody())) {
                                        Logger::info("Fetch all global contacts from the server " . $server["nurl"]);
@@ -372,7 +372,7 @@ class PortableContact
                                // Fetch all contacts from a given user from the other server
                                $url = $server['poco'] . '/' . $username . '/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,contactType,generation';
 
-                               $curlResult = Network::curl($url);
+                               $curlResult = HTTPRequest::curl($url);
 
                                if ($curlResult->isSuccess()) {
                                        $data = json_decode($curlResult->getBody(), true);
index 77084591022b0fa2f994ab893dbc23de53d06228..d01ea2ce12b89eefbe3047c68ae7679335133bf9 100644 (file)
@@ -22,9 +22,9 @@
 namespace Friendica\Protocol;
 
 use Friendica\Core\Logger;
+use Friendica\Network\HTTPRequest;
 use Friendica\Network\Probe;
 use Friendica\Util\Crypto;
-use Friendica\Util\Network;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
 
@@ -72,7 +72,7 @@ class Salmon
                                                $ret[$x] = substr($ret[$x], 5);
                                        }
                                } elseif (Strings::normaliseLink($ret[$x]) == 'http://') {
-                                       $ret[$x] = Network::fetchUrl($ret[$x]);
+                                       $ret[$x] = HTTPRequest::fetchUrl($ret[$x]);
                                }
                        }
                }
@@ -155,7 +155,7 @@ class Salmon
                $salmon = XML::fromArray($xmldata, $xml, false, $namespaces);
 
                // slap them
-               $postResult = Network::post($url, $salmon, [
+               $postResult = HTTPRequest::post($url, $salmon, [
                        'Content-type: application/magic-envelope+xml',
                        'Content-length: ' . strlen($salmon)
                ]);
@@ -180,7 +180,7 @@ class Salmon
                        $salmon = XML::fromArray($xmldata, $xml, false, $namespaces);
 
                        // slap them
-                       $postResult = Network::post($url, $salmon, [
+                       $postResult = HTTPRequest::post($url, $salmon, [
                                'Content-type: application/magic-envelope+xml',
                                'Content-length: ' . strlen($salmon)
                        ]);
@@ -203,7 +203,7 @@ class Salmon
                        $salmon = XML::fromArray($xmldata, $xml, false, $namespaces);
 
                        // slap them
-                       $postResult = Network::post($url, $salmon, [
+                       $postResult = HTTPRequest::post($url, $salmon, [
                                'Content-type: application/magic-envelope+xml',
                                'Content-length: ' . strlen($salmon)]);
                        $return_code = $postResult->getReturnCode();
index de13ee82f5964109794552572e76a6ae6c8cf307..710c009796a1cdabb9bc7a098354018d8d326a2b 100644 (file)
@@ -37,6 +37,7 @@ namespace Friendica\Util;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\User;
+use Friendica\Network\HTTPRequest;
 
 class ExAuth
 {
@@ -181,7 +182,7 @@ class ExAuth
 
                $url = ($ssl ? 'https' : 'http') . '://' . $host . '/noscrape/' . $user;
 
-               $curlResult = Network::curl($url);
+               $curlResult = HTTPRequest::curl($url);
 
                if (!$curlResult->isSuccess()) {
                        return false;
index d151516beae7a9bed098f766c43dd1628ced6330..5d57c2281f05e9734a12ad989401e471a2911220 100644 (file)
 
 namespace Friendica\Util;
 
-use Friendica\Database\DBA;
 use Friendica\Core\Logger;
+use Friendica\Database\DBA;
 use Friendica\DI;
-use Friendica\Model\User;
 use Friendica\Model\APContact;
+use Friendica\Model\User;
+use Friendica\Network\HTTPRequest;
 
 /**
  * Implements HTTP Signatures per draft-cavage-http-signatures-07.
@@ -297,7 +298,7 @@ class HTTPSignature
 
                $headers[] = 'Content-Type: application/activity+json';
 
-               $postResult = Network::post($target, $content, $headers);
+               $postResult = HTTPRequest::post($target, $content, $headers);
                $return_code = $postResult->getReturnCode();
 
                Logger::log('Transmit to ' . $target . ' returned ' . $return_code, Logger::DEBUG);
@@ -442,7 +443,7 @@ class HTTPSignature
                $curl_opts = $opts;
                $curl_opts['header'] = $headers;
 
-               $curlResult = Network::curl($request, false, $curl_opts);
+               $curlResult = HTTPRequest::curl($request, false, $curl_opts);
                $return_code = $curlResult->getReturnCode();
 
                Logger::log('Fetched for user ' . $uid . ' from ' . $request . ' returned ' . $return_code, Logger::DEBUG);
index 35f0cfc042e4be875e1116814b048bc361a846dc..9e3be4f4f902f3425c38cf8ddf05b1a453898756 100644 (file)
@@ -24,6 +24,7 @@ namespace Friendica\Util;
 use Friendica\Core\Logger;
 use Friendica\Core\System;
 use Friendica\DI;
+use Friendica\Network\HTTPRequest;
 
 /**
  * Image utilities
@@ -184,7 +185,7 @@ class Images
                        return $data;
                }
 
-               $img_str = Network::fetchUrl($url, true, 4);
+               $img_str = HTTPRequest::fetchUrl($url, true, 4);
 
                if (!$img_str) {
                        return [];
index ddec3599073c9d33d54f9d21521e6d5c7401005a..888dc20a692e386946ea8b3ee87693570e2069df 100644 (file)
@@ -27,340 +27,9 @@ use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\Core\System;
 use Friendica\DI;
-use Friendica\Network\CurlResult;
 
 class Network
 {
-       /**
-        * 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.
-        *
-        * @param string  $url            URL to fetch
-        * @param bool    $binary         default false
-        *                                TRUE if asked to return binary results (file download)
-        * @param int     $timeout        Timeout in seconds, default system config value or 60 seconds
-        * @param string  $accept_content supply Accept: header with 'accept_content' as the value
-        * @param string  $cookiejar      Path to cookie jar file
-        * @param int     $redirects      The recursion counter for internal use - default 0
-        *
-        * @return string The fetched content
-        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
-        */
-       public static function fetchUrl(string $url, bool $binary = false, int $timeout = 0, string $accept_content = '', string $cookiejar = '', int &$redirects = 0)
-       {
-               $ret = self::fetchUrlFull($url, $binary, $timeout, $accept_content, $cookiejar, $redirects);
-
-               return $ret->getBody();
-       }
-
-       /**
-        * Curl wrapper with array of return values.
-        *
-        * Inner workings and parameters are the same as @ref fetchUrl but returns an array with
-        * all the information collected during the fetch.
-        *
-        * @param string  $url            URL to fetch
-        * @param bool    $binary         default false
-        *                                TRUE if asked to return binary results (file download)
-        * @param int     $timeout        Timeout in seconds, default system config value or 60 seconds
-        * @param string  $accept_content supply Accept: header with 'accept_content' as the value
-        * @param string  $cookiejar      Path to cookie jar file
-        * @param int     $redirects      The recursion counter for internal use - default 0
-        *
-        * @return CurlResult With all relevant information, 'body' contains the actual fetched content.
-        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
-        */
-       public static function fetchUrlFull(string $url, bool $binary = false, int $timeout = 0, string $accept_content = '', string $cookiejar = '', int &$redirects = 0)
-       {
-               return self::curl(
-                       $url,
-                       $binary,
-                       [
-                               'timeout'        => $timeout,
-                               'accept_content' => $accept_content,
-                               'cookiejar'      => $cookiejar
-                       ],
-                       $redirects
-               );
-       }
-
-       /**
-        * fetches an URL.
-        *
-        * @param string  $url       URL to fetch
-        * @param bool    $binary    default false
-        *                           TRUE if asked to return binary results (file download)
-        * @param array   $opts      (optional parameters) assoziative array with:
-        *                           'accept_content' => supply Accept: header with 'accept_content' as the value
-        *                           'timeout' => int Timeout in seconds, default system config value or 60 seconds
-        *                           'http_auth' => username:password
-        *                           'novalidate' => do not validate SSL certs, default is to validate using our CA list
-        *                           'nobody' => only return the header
-        *                           'cookiejar' => path to cookie jar file
-        *                           'header' => header array
-        * @param int     $redirects The recursion counter for internal use - default 0
-        *
-        * @return CurlResult
-        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
-        */
-       public static function curl(string $url, bool $binary = false, array $opts = [], int &$redirects = 0)
-       {
-               $stamp1 = microtime(true);
-
-               $a = DI::app();
-
-               if (strlen($url) > 1000) {
-                       Logger::log('URL is longer than 1000 characters. Callstack: ' . System::callstack(20), Logger::DEBUG);
-                       return CurlResult::createErrorCurl(substr($url, 0, 200));
-               }
-
-               $parts2 = [];
-               $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::log('domain of ' . $url . ' is blocked', Logger::DATA);
-                       return CurlResult::createErrorCurl($url);
-               }
-
-               $ch = @curl_init($url);
-
-               if (($redirects > 8) || (!$ch)) {
-                       return CurlResult::createErrorCurl($url);
-               }
-
-               @curl_setopt($ch, CURLOPT_HEADER, true);
-
-               if (!empty($opts['cookiejar'])) {
-                       curl_setopt($ch, CURLOPT_COOKIEJAR, $opts["cookiejar"]);
-                       curl_setopt($ch, CURLOPT_COOKIEFILE, $opts["cookiejar"]);
-               }
-
-               // These settings aren't needed. We're following the location already.
-               //      @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
-               //      @curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
-
-               if (!empty($opts['accept_content'])) {
-                       curl_setopt(
-                               $ch,
-                               CURLOPT_HTTPHEADER,
-                               ['Accept: ' . $opts['accept_content']]
-                       );
-               }
-
-               if (!empty($opts['header'])) {
-                       curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['header']);
-               }
-
-               @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-               @curl_setopt($ch, CURLOPT_USERAGENT, $a->getUserAgent());
-
-               $range = intval(DI::config()->get('system', 'curl_range_bytes', 0));
-
-               if ($range > 0) {
-                       @curl_setopt($ch, CURLOPT_RANGE, '0-' . $range);
-               }
-
-               // Without this setting it seems as if some webservers send compressed content
-               // This seems to confuse curl so that it shows this uncompressed.
-               /// @todo  We could possibly set this value to "gzip" or something similar
-               curl_setopt($ch, CURLOPT_ENCODING, '');
-
-               if (!empty($opts['headers'])) {
-                       @curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['headers']);
-               }
-
-               if (!empty($opts['nobody'])) {
-                       @curl_setopt($ch, CURLOPT_NOBODY, $opts['nobody']);
-               }
-
-               if (!empty($opts['timeout'])) {
-                       @curl_setopt($ch, CURLOPT_TIMEOUT, $opts['timeout']);
-               } else {
-                       $curl_time = DI::config()->get('system', 'curl_timeout', 60);
-                       @curl_setopt($ch, CURLOPT_TIMEOUT, intval($curl_time));
-               }
-
-               // by default we will allow self-signed certs
-               // but you can override this
-
-               $check_cert = DI::config()->get('system', 'verifyssl');
-               @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
-
-               if ($check_cert) {
-                       @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
-               }
-
-               $proxy = DI::config()->get('system', 'proxy');
-
-               if (strlen($proxy)) {
-                       @curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
-                       @curl_setopt($ch, CURLOPT_PROXY, $proxy);
-                       $proxyuser = @DI::config()->get('system', 'proxyuser');
-
-                       if (strlen($proxyuser)) {
-                               @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuser);
-                       }
-               }
-
-               if (DI::config()->get('system', 'ipv4_resolve', false)) {
-                       curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
-               }
-
-               if ($binary) {
-                       @curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
-               }
-
-               // don't let curl abort the entire application
-               // if it throws any errors.
-
-               $s = @curl_exec($ch);
-               $curl_info = @curl_getinfo($ch);
-
-               // Special treatment for HTTP Code 416
-               // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/416
-               if (($curl_info['http_code'] == 416) && ($range > 0)) {
-                       @curl_setopt($ch, CURLOPT_RANGE, '');
-                       $s = @curl_exec($ch);
-                       $curl_info = @curl_getinfo($ch);
-               }
-
-               $curlResponse = new CurlResult($url, $s, $curl_info, curl_errno($ch), curl_error($ch));
-
-               if ($curlResponse->isRedirectUrl()) {
-                       $redirects++;
-                       Logger::log('curl: redirect ' . $url . ' to ' . $curlResponse->getRedirectUrl());
-                       @curl_close($ch);
-                       return self::curl($curlResponse->getRedirectUrl(), $binary, $opts, $redirects);
-               }
-
-               @curl_close($ch);
-
-               DI::profiler()->saveTimestamp($stamp1, 'network', System::callstack());
-
-               return $curlResponse;
-       }
-
-       /**
-        * Send POST request to $url
-        *
-        * @param string  $url       URL to post
-        * @param mixed   $params    array of POST variables
-        * @param array   $headers   HTTP headers
-        * @param int     $redirects Recursion counter for internal use - default = 0
-        * @param int     $timeout   The timeout in seconds, default system config value or 60 seconds
-        *
-        * @return CurlResult The content
-        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
-        */
-       public static function post(string $url, $params, array $headers = [], int $timeout = 0, int &$redirects = 0)
-       {
-               $stamp1 = microtime(true);
-
-               if (self::isUrlBlocked($url)) {
-                       Logger::log('post_url: domain of ' . $url . ' is blocked', Logger::DATA);
-                       return CurlResult::createErrorCurl($url);
-               }
-
-               $a = DI::app();
-               $ch = curl_init($url);
-
-               if (($redirects > 8) || (!$ch)) {
-                       return CurlResult::createErrorCurl($url);
-               }
-
-               Logger::log('post_url: start ' . $url, Logger::DATA);
-
-               curl_setopt($ch, CURLOPT_HEADER, true);
-               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-               curl_setopt($ch, CURLOPT_POST, 1);
-               curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
-               curl_setopt($ch, CURLOPT_USERAGENT, $a->getUserAgent());
-
-               if (DI::config()->get('system', 'ipv4_resolve', false)) {
-                       curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
-               }
-
-               if (intval($timeout)) {
-                       curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
-               } else {
-                       $curl_time = DI::config()->get('system', 'curl_timeout', 60);
-                       curl_setopt($ch, CURLOPT_TIMEOUT, intval($curl_time));
-               }
-
-               if (!empty($headers)) {
-                       curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
-               }
-
-               $check_cert = DI::config()->get('system', 'verifyssl');
-               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
-
-               if ($check_cert) {
-                       @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
-               }
-
-               $proxy = DI::config()->get('system', 'proxy');
-
-               if (strlen($proxy)) {
-                       curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
-                       curl_setopt($ch, CURLOPT_PROXY, $proxy);
-                       $proxyuser = DI::config()->get('system', 'proxyuser');
-                       if (strlen($proxyuser)) {
-                               curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuser);
-                       }
-               }
-
-               // don't let curl abort the entire application
-               // if it throws any errors.
-
-               $s = @curl_exec($ch);
-
-               $curl_info = curl_getinfo($ch);
-
-               $curlResponse = new CurlResult($url, $s, $curl_info, curl_errno($ch), curl_error($ch));
-
-               if ($curlResponse->isRedirectUrl()) {
-                       $redirects++;
-                       Logger::log('post_url: redirect ' . $url . ' to ' . $curlResponse->getRedirectUrl());
-                       curl_close($ch);
-                       return self::post($curlResponse->getRedirectUrl(), $params, $headers, $redirects, $timeout);
-               }
-
-               curl_close($ch);
-
-               DI::profiler()->saveTimestamp($stamp1, 'network', System::callstack());
-
-               // Very old versions of Lighttpd don't like the "Expect" header, so we remove it when needed
-               if ($curlResponse->getReturnCode() == 417) {
-                       $redirects++;
-
-                       if (empty($headers)) {
-                               $headers = ['Expect:'];
-                       } else {
-                               if (!in_array('Expect:', $headers)) {
-                                       array_push($headers, 'Expect:');
-                               }
-                       }
-                       Logger::info('Server responds with 417, applying workaround', ['url' => $url]);
-                       return self::post($url, $params, $headers, $redirects, $timeout);
-               }
-
-               Logger::log('post_url: end ' . $url, Logger::DATA);
-
-               return $curlResponse;
-       }
 
        /**
         * Return raw post data from a post request
index b6d172a3a1da36402a011bab916ba881ceb04223..577ffd4c11a65ba9ce80595918a35c80046f0b97 100644 (file)
@@ -27,6 +27,7 @@ use Friendica\Content\OEmbed;
 use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\Database\DBA;
+use Friendica\Network\HTTPRequest;
 
 /**
  * Get information about a given URL
@@ -159,7 +160,7 @@ class ParseUrl
                        return $siteinfo;
                }
 
-               $curlResult = Network::curl($url);
+               $curlResult = HTTPRequest::curl($url);
                if (!$curlResult->isSuccess()) {
                        return $siteinfo;
                }
index 9572342c3ececf8fbbc4c006421c3bb4902b0fd8..f0369daab3eb3738577f47e30c1aa2e9e485ea62 100644 (file)
@@ -24,7 +24,7 @@ namespace Friendica\Worker;
 use Friendica\Core\Logger;
 use Friendica\Database\DBA;
 use Friendica\DI;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 
 /**
  * Check the git repository VERSION file and save the version to the DB
@@ -55,7 +55,7 @@ class CheckVersion
                Logger::log("Checking VERSION from: ".$checked_url, Logger::DEBUG);
 
                // fetch the VERSION file
-               $gitversion = DBA::escape(trim(Network::fetchUrl($checked_url)));
+               $gitversion = DBA::escape(trim(HTTPRequest::fetchUrl($checked_url)));
                Logger::log("Upstream VERSION is: ".$gitversion, Logger::DEBUG);
 
                DI::config()->set('system', 'git_friendica_version', $gitversion);
index 319a369d1fa69a6953059bedb954b81afe8199b2..23434beb14049009f724dc2aa3931323e8b0a0d5 100644 (file)
@@ -30,12 +30,10 @@ use Friendica\Database\PostUpdate;
 use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\GContact;
-use Friendica\Model\GServer;
 use Friendica\Model\Nodeinfo;
 use Friendica\Model\Photo;
 use Friendica\Model\User;
-use Friendica\Network\Probe;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\Proxy as ProxyUtils;
 use Friendica\Util\Strings;
 
@@ -63,7 +61,7 @@ class CronJobs
                                // Now trying to register
                                $url = 'http://the-federation.info/register/' . DI::baseUrl()->getHostname();
                                Logger::debug('Check registering url', ['url' => $url]);
-                               $ret = Network::fetchUrl($url);
+                               $ret = HTTPRequest::fetchUrl($url);
                                Logger::debug('Check registering answer', ['answer' => $ret]);
                                Logger::info('cron_end');
                                break;
index 6c6d26f26cc35fcaf3bc29d4d8ce6e864ecbcf99..0dea9841f06e7ff3c74b13c6ae3fb2606f6e30ce 100644 (file)
@@ -26,7 +26,7 @@ use Friendica\Core\Logger;
 use Friendica\Core\Worker;
 use Friendica\Database\DBA;
 use Friendica\DI;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 
 /**
  * Sends updated profile data to the directory
@@ -54,7 +54,7 @@ class Directory
 
                Logger::log('Updating directory: ' . $arr['url'], Logger::DEBUG);
                if (strlen($arr['url'])) {
-                       Network::fetchUrl($dir . '?url=' . bin2hex($arr['url']));
+                       HTTPRequest::fetchUrl($dir . '?url=' . bin2hex($arr['url']));
                }
 
                return;
index fa8f748334e431a7495a25ebf44c76e633fbf8dd..13d1b8ee7ab2982c10dfaad57a5045d7b6006285 100644 (file)
@@ -28,13 +28,13 @@ use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\Item;
 use Friendica\Model\User;
+use Friendica\Network\HTTPRequest;
 use Friendica\Protocol\Activity;
 use Friendica\Protocol\ActivityPub;
 use Friendica\Protocol\Email;
 use Friendica\Protocol\Feed;
 use Friendica\Protocol\PortableContact;
 use Friendica\Util\DateTimeFormat;
-use Friendica\Util\Network;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
 
@@ -291,7 +291,7 @@ class OnePoll
                        . '&type=data&last_update=' . $last_update
                        . '&perm=' . $perm;
 
-               $curlResult = Network::curl($url);
+               $curlResult = HTTPRequest::curl($url);
 
                if (!$curlResult->isSuccess() && ($curlResult->getErrorNumber() == CURLE_OPERATION_TIMEDOUT)) {
                        // set the last-update so we don't keep polling
@@ -405,7 +405,7 @@ class OnePoll
                $postvars['dfrn_version'] = DFRN_PROTOCOL_VERSION;
                $postvars['perm'] = 'rw';
 
-               return Network::post($contact['poll'], $postvars)->getBody();
+               return HTTPRequest::post($contact['poll'], $postvars)->getBody();
        }
 
        /**
@@ -444,7 +444,7 @@ class OnePoll
                }
 
                $cookiejar = tempnam(get_temppath(), 'cookiejar-onepoll-');
-               $curlResult = Network::curl($contact['poll'], false, ['cookiejar' => $cookiejar]);
+               $curlResult = HTTPRequest::curl($contact['poll'], false, ['cookiejar' => $cookiejar]);
                unlink($cookiejar);
 
                if ($curlResult->isTimeout()) {
@@ -756,7 +756,7 @@ class OnePoll
                        DBA::update('contact', ['hub-verify' => $verify_token], ['id' => $contact['id']]);
                }
 
-               $postResult = Network::post($url, $params);
+               $postResult = HTTPRequest::post($url, $params);
 
                Logger::log('subscribe_to_hub: returns: ' . $postResult->getReturnCode(), Logger::DEBUG);
 
index 2eb94eeb72cb837a30702bf20d42834d033cf96c..4fa3b3e8941d2478659feaa828cd14492b3c1cf5 100644 (file)
@@ -25,8 +25,8 @@ use Friendica\Core\Logger;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\PushSubscriber;
+use Friendica\Network\HTTPRequest;
 use Friendica\Protocol\OStatus;
-use Friendica\Util\Network;
 
 class PubSubPublish
 {
@@ -68,7 +68,7 @@ class PubSubPublish
 
                Logger::log('POST ' . print_r($headers, true) . "\n" . $params, Logger::DATA);
 
-               $postResult = Network::post($subscriber['callback_url'], $params, $headers);
+               $postResult = HTTPRequest::post($subscriber['callback_url'], $params, $headers);
                $ret = $postResult->getReturnCode();
 
                if ($ret >= 200 && $ret <= 299) {
index afe54e5fb1ee4fb70ec3ad6808447e07fbfeb69f..1dcf0c8db6bb4990cdc08cc35235aaeb50686af9 100644 (file)
@@ -30,7 +30,7 @@ use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\GContact;
 use Friendica\Model\GServer;
-use Friendica\Util\Network;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\Strings;
 
 class SearchDirectory
@@ -52,7 +52,7 @@ class SearchDirectory
                        }
                }
 
-               $x = Network::fetchUrl(Search::getGlobalDirectory() . '/lsearch?p=1&n=500&search=' . urlencode($search));
+               $x = HTTPRequest::fetchUrl(Search::getGlobalDirectory() . '/lsearch?p=1&n=500&search=' . urlencode($search));
                $j = json_decode($x);
 
                if (!empty($j->results)) {