diff --git a/contrib/prepare_release/fetch_contributors.php b/contrib/prepare_release/fetch_contributors.php index 724d9fd1..479b95c3 100644 --- a/contrib/prepare_release/fetch_contributors.php +++ b/contrib/prepare_release/fetch_contributors.php @@ -12,9 +12,9 @@ $next = true; while ($next) { /* Collect all contributors */ $headers = [ - 'Accept: application/json', - 'Content-Type: application/json', - 'User-Agent: RSS-Bridge' + 'Accept' => 'application/json', + 'Content-Type' => 'application/json', + 'User-Agent' => 'RSS-Bridge', ]; $result = _http_request($url, ['headers' => $headers]); diff --git a/lib/contents.php b/lib/contents.php index 60282212..94e45b95 100644 --- a/lib/contents.php +++ b/lib/contents.php @@ -75,8 +75,26 @@ function getContents( $cache->purgeCache(86400); // 24 hours (forced) $cache->setKey([$url]); + // Snagged from https://github.com/lwthiker/curl-impersonate/blob/main/firefox/curl_ff102 + $defaultHttpHeaders = [ + 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', + 'Accept-Language' => 'en-US,en;q=0.5', + 'Upgrade-Insecure-Requests' => '1', + 'Sec-Fetch-Dest' => 'document', + 'Sec-Fetch-Mode' => 'navigate', + 'Sec-Fetch-Site' => 'none', + 'Sec-Fetch-User' => '?1', + 'TE' => 'Trailers', + ]; + $httpHeadersNormalized = []; + foreach ($httpHeaders as $httpHeader) { + $parts = explode(':', $httpHeader); + $headerName = trim($parts[0]); + $headerValue = trim(implode(':', array_slice($parts, 1))); + $httpHeadersNormalized[$headerName] = $headerValue; + } $config = [ - 'headers' => $httpHeaders, + 'headers' => array_merge($defaultHttpHeaders, $httpHeadersNormalized), 'curl_options' => $curlOptions, ]; if (Configuration::getConfig('proxy', 'url') && !defined('NOPROXY')) { @@ -154,7 +172,11 @@ function _http_request(string $url, array $config = []): array curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 5); curl_setopt($ch, CURLOPT_HEADER, false); - curl_setopt($ch, CURLOPT_HTTPHEADER, $config['headers']); + $httpHeaders = []; + foreach ($config['headers'] as $name => $value) { + $httpHeaders[] = sprintf('%s: %s', $name, $value); + } + curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeaders); curl_setopt($ch, CURLOPT_USERAGENT, $config['useragent']); curl_setopt($ch, CURLOPT_TIMEOUT, $config['timeout']); curl_setopt($ch, CURLOPT_ENCODING, '');