X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FUtil%2FParseUrl.php;h=abd9154da1cb83ba4adcbf3bd50ec58f00d25d6a;hb=036b565a7846916f763ce1dcbcaade0844ff1589;hp=c1fcff28e6b2ef380eb3d8ec425a620c1435b4a3;hpb=322b7c856ca9ba53bd9c7da50dd5c1e3c9197d56;p=friendica.git diff --git a/src/Util/ParseUrl.php b/src/Util/ParseUrl.php index c1fcff28e6..abd9154da1 100644 --- a/src/Util/ParseUrl.php +++ b/src/Util/ParseUrl.php @@ -29,6 +29,7 @@ use Friendica\Core\Logger; use Friendica\Database\Database; use Friendica\Database\DBA; use Friendica\DI; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPException; use Friendica\Network\HTTPClient\Client\HttpClientOptions; @@ -54,19 +55,27 @@ class ParseUrl /** * Fetch the content type of the given url - * @param string $url URL of the page + * @param string $url URL of the page + * @param string $accept content-type to accept * @return array content type */ - public static function getContentType(string $url) + public static function getContentType(string $url, string $accept = HttpClientAccept::DEFAULT) { - $curlResult = DI::httpClient()->head($url); + $curlResult = DI::httpClient()->head($url, [HttpClientOptions::ACCEPT_CONTENT => $accept]); + + // Workaround for systems that can't handle a HEAD request + if (!$curlResult->isSuccess() && ($curlResult->getReturnCode() == 405)) { + $curlResult = DI::httpClient()->get($url, $accept, [HttpClientOptions::CONTENT_LENGTH => 1000000]); + } + if (!$curlResult->isSuccess()) { + Logger::debug('Got HTTP Error', ['http error' => $curlResult->getReturnCode(), 'url' => $url]); return []; } $contenttype = $curlResult->getHeader('Content-Type')[0] ?? ''; if (empty($contenttype)) { - return []; + return ['application', 'octet-stream']; } return explode('/', current(explode(';', $contenttype))); @@ -214,8 +223,9 @@ class ParseUrl return $siteinfo; } - $curlResult = DI::httpClient()->get($url, [HttpClientOptions::CONTENT_LENGTH => 1000000]); + $curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML, [HttpClientOptions::CONTENT_LENGTH => 1000000]); if (!$curlResult->isSuccess() || empty($curlResult->getBody())) { + Logger::info('Empty body or error when fetching', ['url' => $url, 'success' => $curlResult->isSuccess(), 'code' => $curlResult->getReturnCode()]); return $siteinfo; }