X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNetwork%2FCurlResult.php;h=1a475c7cec959983a2c5312a806ab29aa8b3e76b;hb=a60a440c9af0caf5127c47bb59531138c906ea75;hp=e246f4fa5601ed78075c9180645b8e8725ccdcfd;hpb=735a5980bd1da3afc3eaa95edcd80478864a032b;p=friendica.git diff --git a/src/Network/CurlResult.php b/src/Network/CurlResult.php index e246f4fa56..1a475c7cec 100644 --- a/src/Network/CurlResult.php +++ b/src/Network/CurlResult.php @@ -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 @@ -76,6 +77,7 @@ class CurlResult * @param string $url optional URL * * @return CurlResult a CURL with error response + * @throws InternalServerErrorException */ public static function createErrorCurl($url = '') { @@ -104,7 +106,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(); @@ -133,9 +135,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 +161,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) !== false; + $this->redirectUrl = Network::unparseURL($redirect_parts); + + $this->isRedirectUrl = true; } else { $this->isRedirectUrl = false; }