Add HTTPRequest::head() function

This commit is contained in:
Philipp 2020-10-18 22:15:20 +02:00
parent bfbf8816e2
commit 61da51c2d5
No known key found for this signature in database
GPG key ID: 9A28B7D4FF5667BD
4 changed files with 34 additions and 8 deletions

View 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 // Check if the URL is an image, video or audio file. If so format
// the URL with the corresponding BBCode media tag // the URL with the corresponding BBCode media tag
// Fetch the header of the URL // 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()) { if ($curlResponse->isSuccess()) {
// Convert the header fields into an array // Convert the header fields into an array

View file

@ -52,6 +52,17 @@ class HTTPRequest implements IHTTPRequest
$this->baseUrl = $baseUrl->get(); $this->baseUrl = $baseUrl->get();
} }
/** {@inheritDoc}
*
* @throws HTTPException\InternalServerErrorException
*/
public function head(string $url, array $opts = [])
{
$opts['nobody'] = true;
return $this->get($url, $opts);
}
/** /**
* {@inheritDoc} * {@inheritDoc}
* *

View file

@ -29,12 +29,10 @@ interface IHTTPRequest
/** /**
* Fetches the content of an URL * 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") * Set the cookiejar argument to a string (e.g. "/tmp/friendica-cookies.txt")
* to preserve cookies from one request to the next. * to preserve cookies from one request to the next.
* *
* @param string $url URL to 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 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 $accept_content supply Accept: header with 'accept_content' as the value
* @param string $cookiejar Path to cookie jar file * @param string $cookiejar Path to cookie jar file
@ -50,7 +48,6 @@ interface IHTTPRequest
* all the information collected during the fetch. * all the information collected during the fetch.
* *
* @param string $url URL to 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 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 $accept_content supply Accept: header with 'accept_content' as the value
* @param string $cookiejar Path to cookie jar file * @param string $cookiejar Path to cookie jar file
@ -60,16 +57,30 @@ interface IHTTPRequest
public function fetchFull(string $url, int $timeout = 0, string $accept_content = '', string $cookiejar = ''); public function fetchFull(string $url, int $timeout = 0, string $accept_content = '', string $cookiejar = '');
/** /**
* Send a GET to an URL. * 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 * @param string $url URL to fetch
* TRUE if asked to return binary results (file download)
* @param array $opts (optional parameters) assoziative array with: * @param array $opts (optional parameters) assoziative array with:
* 'accept_content' => supply Accept: header with 'accept_content' as the value * 'accept_content' => supply Accept: header with 'accept_content' as the value
* 'timeout' => int Timeout in seconds, default system config value or 60 seconds * 'timeout' => int Timeout in seconds, default system config value or 60 seconds
* 'http_auth' => username:password * 'http_auth' => username:password
* 'novalidate' => do not validate SSL certs, default is to validate using our CA list * '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 * 'cookiejar' => path to cookie jar file
* 'header' => header array * 'header' => header array
* *

View file

@ -449,7 +449,11 @@ class HTTPSignature
$curl_opts = $opts; $curl_opts = $opts;
$curl_opts['header'] = $headers; $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(); $return_code = $curlResult->getReturnCode();
Logger::log('Fetched for user ' . $uid . ' from ' . $request . ' returned ' . $return_code, Logger::DEBUG); Logger::log('Fetched for user ' . $uid . ' from ' . $request . ' returned ' . $return_code, Logger::DEBUG);