Add HTTPRequest::head() function
authorPhilipp <admin@philipp.info>
Sun, 18 Oct 2020 20:15:20 +0000 (22:15 +0200)
committerPhilipp <admin@philipp.info>
Sun, 18 Oct 2020 20:15:53 +0000 (22:15 +0200)
mod/parse_url.php
src/Network/HTTPRequest.php
src/Network/IHTTPRequest.php
src/Util/HTTPSignature.php

index ede557f..3c931fd 100644 (file)
@@ -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 = DI::httpRequest()->get($url, ['novalidate' => true, 'nobody' => true]);
+       $curlResponse = DI::httpRequest()->head($url, ['novalidate' => true]);
 
        if ($curlResponse->isSuccess()) {
                // Convert the header fields into an array
index 6442295..df62ea4 100644 (file)
@@ -52,6 +52,17 @@ class HTTPRequest implements IHTTPRequest
                $this->baseUrl  = $baseUrl->get();
        }
 
+       /** {@inheritDoc}
+        *
+        * @throws HTTPException\InternalServerErrorException
+        */
+       public function head(string $url, array $opts = [])
+       {
+               $opts['nobody'] = true;
+
+               return $this->get($url, $opts);
+       }
+
        /**
         * {@inheritDoc}
         *
index d6bf981..a1c7730 100644 (file)
@@ -29,12 +29,10 @@ interface IHTTPRequest
        /**
         * Fetches the content of an URL
         *
-        * 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
-        *                                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
@@ -50,7 +48,6 @@ interface IHTTPRequest
         * all the information collected during the fetch.
         *
         * @param string $url             URL to fetch
-        *                                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
@@ -59,17 +56,31 @@ interface IHTTPRequest
         */
        public function fetchFull(string $url, int $timeout = 0, string $accept_content = '', string $cookiejar = '');
 
+       /**
+        * Send a HEAD to an URL.
+        *
+        * @param string $url        URL to fetch
+        * @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
+        *                           'cookiejar' => path to cookie jar file
+        *                           'header' => header array
+        *
+        * @return CurlResult
+        */
+       public function head(string $url, array $opts = []);
+
        /**
         * Send a GET to an URL.
         *
         * @param string $url        URL to fetch
-        *                           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
         *
index e3ed5d0..61e95a5 100644 (file)
@@ -449,7 +449,11 @@ class HTTPSignature
                $curl_opts = $opts;
                $curl_opts['header'] = $headers;
 
-               $curlResult = DI::httpRequest()->get($request, $curl_opts);
+               if ($opts['nobody']) {
+                       $curlResult = DI::httpRequest()->head($request, $curl_opts);
+               } else {
+                       $curlResult = DI::httpRequest()->get($request, $curl_opts);
+               }
                $return_code = $curlResult->getReturnCode();
 
                Logger::log('Fetched for user ' . $uid . ' from ' . $request . ' returned ' . $return_code, Logger::DEBUG);