]> git.mxchange.org Git - friendica.git/blobdiff - src/Network/CurlResult.php
Fix storage backend class names
[friendica.git] / src / Network / CurlResult.php
index dc83182a64a4b2cbd212feed64b52a5d3ec440d4..1aafbfa9b8160d8e8c1f6447080850f9f0f5867f 100644 (file)
@@ -2,8 +2,9 @@
 
 namespace Friendica\Network;
 
-
+use Friendica\Core\Logger;
 use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Util\Network;
 
 /**
  * A content class for Curl call results
@@ -104,7 +105,7 @@ class CurlResult
                $this->errorNumber = $errorNumber;
                $this->error = $error;
 
-               logger($url . ': ' . $this->returnCode . " " . $result, LOGGER_DATA);
+               Logger::log($url . ': ' . $this->returnCode . " " . $result, Logger::DATA);
 
                $this->parseBodyHeader($result);
                $this->checkSuccess();
@@ -119,7 +120,7 @@ class CurlResult
 
                $header = '';
                $base = $result;
-               while (preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/', $base)) {
+               while (preg_match('/^HTTP\/.+? \d+/', $base)) {
                        $chunk = substr($base, 0, strpos($base, "\r\n\r\n") + 4);
                        $header .= $chunk;
                        $base = substr($base, strlen($chunk));
@@ -133,9 +134,14 @@ class CurlResult
        {
                $this->isSuccess = ($this->returnCode >= 200 && $this->returnCode <= 299) || $this->errorNumber == 0;
 
+               // Everything higher or equal 400 is not a success
+               if ($this->returnCode >= 400) {
+                       $this->isSuccess = false;
+               }
+
                if (!$this->isSuccess) {
-                       logger('error: ' . $this->url . ': ' . $this->returnCode . ' - ' . $this->error, LOGGER_INFO);
-                       logger('debug: ' . print_r($this->info, true), LOGGER_DATA);
+                       Logger::log('error: ' . $this->url . ': ' . $this->returnCode . ' - ' . $this->error, Logger::INFO);
+                       Logger::log('debug: ' . print_r($this->info, true), Logger::DATA);
                }
 
                if (!$this->isSuccess && $this->errorNumber == CURLE_OPERATION_TIMEDOUT) {
@@ -154,30 +160,34 @@ class CurlResult
                }
 
                if ($this->returnCode == 301 || $this->returnCode == 302 || $this->returnCode == 303 || $this->returnCode== 307) {
-                       $new_location_info = (!array_key_exists('redirect_url', $this->info) ? '' : @parse_url($this->info['redirect_url']));
-                       $old_location_info = (!array_key_exists('url', $this->info) ? '' : @parse_url($this->info['url']));
-
-                       $this->redirectUrl = $new_location_info;
-
-                       if (empty($new_location_info['path']) && !empty($new_location_info['host'])) {
-                               $this->redirectUrl = $new_location_info['scheme'] . '://' . $new_location_info['host'] . $old_location_info['path'];
+                       $redirect_parts = parse_url(defaults($this->info, 'redirect_url', ''));
+                       if (empty($redirect_parts)) {
+                               $redirect_parts = [];
                        }
 
-                       $matches = [];
-
                        if (preg_match('/(Location:|URI:)(.*?)\n/i', $this->header, $matches)) {
-                               $this->redirectUrl = trim(array_pop($matches));
+                               $redirect_parts2 = parse_url(trim(array_pop($matches)));
+                               if (!empty($redirect_parts2)) {
+                                       $redirect_parts = array_merge($redirect_parts, $redirect_parts2);
+                               }
                        }
-                       if (strpos($this->redirectUrl, '/') === 0) {
-                               $this->redirectUrl = $old_location_info["scheme"] . "://" . $old_location_info["host"] . $this->redirectUrl;
+
+                       $parts = parse_url(defaults($this->info, 'url', ''));
+                       if (empty($parts)) {
+                               $parts = [];
                        }
-                       $old_location_query = @parse_url($this->url, PHP_URL_QUERY);
 
-                       if ($old_location_query != '') {
-                               $this->redirectUrl .= '?' . $old_location_query;
+                       /// @todo Checking the corresponding RFC which parts of a redirect can be ommitted.
+                       $components = ['scheme', 'host', 'path', 'query', 'fragment'];
+                       foreach ($components as $component) {
+                               if (empty($redirect_parts[$component]) && !empty($parts[$component])) {
+                                       $redirect_parts[$component] = $parts[$component];
+                               }
                        }
 
-                       $this->isRedirectUrl = filter_var($this->redirectUrl, FILTER_VALIDATE_URL);
+                       $this->redirectUrl = Network::unparseURL($redirect_parts);
+
+                       $this->isRedirectUrl = true;
                } else {
                        $this->isRedirectUrl = false;
                }