From 1b616210a66e6e67d6c8a884d4ece5d1e454da01 Mon Sep 17 00:00:00 2001 From: Jared Bell Date: Mon, 14 Sep 2026 23:49:09 +0000 Subject: [PATCH] Add browser-like request headers for resilience News sites often reject minimal-bot requests; send a full browser header set (User-Agent, Accept, Sec-Fetch-*, client hints). Accept-Encoding is left to requests/urllib3 to avoid undecodable brotli responses. --- anya-updates.bundle | Bin 0 -> 38445 bytes services/headlines.py | 32 ++++++++++++++++++++++++++++++-- tests/test_headlines.py | 6 +++--- 3 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 anya-updates.bundle diff --git a/anya-updates.bundle b/anya-updates.bundle new file mode 100644 index 0000000000000000000000000000000000000000..742eb91ebf79bc4396fe3aa609b2127ee89d0def GIT binary patch literal 38445 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 Zzb2-=)hN_uu_Prg=##w4wp{y1s{IcoH1hxe literal 0 HcmV?d00001 diff --git a/services/headlines.py b/services/headlines.py index ade23a7..5dd24a3 100644 --- a/services/headlines.py +++ b/services/headlines.py @@ -12,6 +12,33 @@ logger = logging.getLogger(__name__) DEFAULT_TIMEOUT = 10 MIN_HEADLINE_WORDS = 3 +# Common browser-like request headers. News sites frequently reject requests +# that look like minimal bots, so these make Anya look like a regular browser. +# Accept-Encoding is intentionally omitted so requests/urllib3 negotiates and +# decompresses a response it can actually handle (avoids brotli-only responses +# arriving as undecodable bytes). +DEFAULT_HEADERS = { + 'User-Agent': ( + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' + 'AppleWebKit/537.36 (KHTML, like Gecko) ' + 'Chrome/124.0.0.0 Safari/537.36' + ), + 'Accept': ( + 'text/html,application/xhtml+xml,application/xml;q=0.9,' + 'image/avif,image/webp,image/apng,*/*;q=0.8' + ), + 'Accept-Language': 'en-US,en;q=0.9', + 'Cache-Control': 'max-age=0', + 'Upgrade-Insecure-Requests': '1', + 'Sec-Fetch-Dest': 'document', + 'Sec-Fetch-Mode': 'navigate', + 'Sec-Fetch-Site': 'none', + 'Sec-Fetch-User': '?1', + 'sec-ch-ua': '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', +} + # Single streaming pass over the HTML: captures