]> git.mxchange.org Git - friendica.git/commitdiff
HTTPRequest: Replace getInfo() with new parameter 'content_length'
authorPhilipp <admin@philipp.info>
Fri, 20 Aug 2021 17:48:20 +0000 (19:48 +0200)
committerPhilipp <admin@philipp.info>
Fri, 20 Aug 2021 17:58:42 +0000 (19:58 +0200)
src/Network/CurlResult.php
src/Network/GuzzleResponse.php
src/Network/HTTPRequest.php
src/Network/IHTTPRequest.php
src/Network/IHTTPResult.php
src/Network/Probe.php
src/Util/ParseUrl.php

index 227d26140e8729c9f414ac78e6c7f5ff8bafa938..65c110338f7abdd2f8c0e538dbc5b7024c0c53af 100644 (file)
@@ -319,12 +319,6 @@ class CurlResult implements IHTTPResult
                return $this->body;
        }
 
-       /** {@inheritDoc} */
-       public function getInfo()
-       {
-               return $this->info;
-       }
-
        /** {@inheritDoc} */
        public function isRedirectUrl()
        {
index c6cab7c9e8742fc5394112599fea69ae6e5fe978..69e88b40250c3568cb3c4023e42c700cb00f9500 100644 (file)
@@ -121,11 +121,6 @@ class GuzzleResponse extends Response implements IHTTPResult, ResponseInterface
                return $this->url;
        }
 
-       public function getInfo()
-       {
-               // TODO: Implement getInfo() method.
-       }
-
        /** {@inheritDoc} */
        public function isRedirectUrl()
        {
index 3bc58c19be457d00cc1fd88796e262732f31031d..cf9b53a92a402f7b97a3034b00e269dc0d9ab0b3 100644 (file)
@@ -30,6 +30,7 @@ use Friendica\Util\Network;
 use Friendica\Util\Profiler;
 use GuzzleHttp\Client;
 use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Exception\TransferException;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\UriInterface;
@@ -204,6 +205,13 @@ class HTTPRequest implements IHTTPRequest
                        $this->logger->notice('Curl redirect.', ['url' => $request->getUri(), 'to' => $uri]);
                };
 
+               $onHeaders = function (ResponseInterface $response) use ($opts) {
+                       if (!empty($opts['content_length']) &&
+                               $response->getHeaderLine('Content-Length') > $opts['content_length']) {
+                               throw new TransferException('The file is too big!');
+                       }
+               };
+
                $client = new Client([
                        'allow_redirect' => [
                                'max' => 8,
@@ -220,8 +228,9 @@ class HTTPRequest implements IHTTPRequest
                try {
                        $response = $client->get($url);
                        return new GuzzleResponse($response, $url);
-               } catch (RequestException $exception) {
-                       if ($exception->hasResponse()) {
+               } catch (TransferException $exception) {
+                       if ($exception instanceof RequestException &&
+                               $exception->hasResponse()) {
                                return new GuzzleResponse($exception->getResponse(), $url, $exception->getCode(), $exception->getMessage());
                        } else {
                                return new CurlResult($url, '', ['http_code' => $exception->getCode()], $exception->getCode(), $exception->getMessage());
index efe9f5f8b223faa4b982c1c9de934b34dba6aaec..b496c7feba33ce3631bfc32bc586c901713e48a4 100644 (file)
@@ -79,6 +79,7 @@ interface IHTTPRequest
         *                           'timeout' => int Timeout in seconds, default system config value or 60 seconds
         *                           'cookiejar' => path to cookie jar file
         *                           'header' => header array
+        *                           'content_length' => int maximum File content length
         *
         * @return IHTTPResult
         */
index 5904bcfa386c8df8ab221645d07a46967c210a81..77ee86976bd044bc672fca9be1bdd5f78db511cb 100644 (file)
@@ -82,11 +82,6 @@ interface IHTTPResult
         */
        public function getBody();
 
-       /**
-        * @return array
-        */
-       public function getInfo();
-
        /**
         * @return boolean
         */
index 8cee679400bbade33b63b83f20aaf4da4eae8467..1115808007a99c420a8f4fadb01fd1924a868a30 100644 (file)
@@ -424,16 +424,11 @@ class Probe
         */
        private static function getHideStatus($url)
        {
-               $curlResult = DI::httpRequest()->get($url);
+               $curlResult = DI::httpRequest()->get($url, false, ['content_length' => 1000000]);
                if (!$curlResult->isSuccess()) {
                        return false;
                }
 
-               // If the file is too large then exit
-               if (($curlResult->getInfo()['download_content_length'] ?? 0) > 1000000) {
-                       return false;
-               }
-
                // If it isn't a HTML file then exit
                if (($curlResult->getContentType() != '') && !strstr(strtolower($curlResult->getContentType()), 'html')) {
                        return false;
index 75210af0f0de0af85b26d324be9563c6677411bd..d95897b1d01c8f7d3a5843d6da166e5359779981 100644 (file)
@@ -213,7 +213,7 @@ class ParseUrl
                        return $siteinfo;
                }
 
-               $curlResult = DI::httpRequest()->get($url);
+               $curlResult = DI::httpRequest()->get($url, false, ['content_length' => 1000000]);
                if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
                        return $siteinfo;
                }