From 5fcdb5d1d64797f1478dba42aa9db9da9f9b78a8 Mon Sep 17 00:00:00 2001 From: Chuck <33324927+ChuckBuilds@users.noreply.github.com> Date: Tue, 22 Sep 2026 17:18:22 -0400 Subject: [PATCH] fix(http): drop APIHelper's hand-set brotli encoding; LogoHelper sends the real UA APIHelper advertised `br` though brotli isn't installed, so a server that honoured it would send a body requests can't decode. LogoHelper sent a bare `LEDMatrix-Common/1.0`, the kind of User-Agent ESPN has been rejecting. Co-Authored-By: Claude Opus 5.5 --- src/common/api_helper.py | 1 - src/common/logo_helper.py | 3 ++- test/test_http_headers.py | 7 +++++++ test/test_logo_helper.py | 3 ++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/common/api_helper.py b/src/common/api_helper.py index 2145ce0d..d025b378 100644 --- a/src/common/api_helper.py +++ b/src/common/api_helper.py @@ -78,7 +78,6 @@ class APIHelper: 'User-Agent': USER_AGENT, 'Accept': 'application/json', 'Accept-Language': 'en-US,en;q=0.9', - 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive' }) diff --git a/src/common/logo_helper.py b/src/common/logo_helper.py index 6f35bf20..a574b89c 100644 --- a/src/common/logo_helper.py +++ b/src/common/logo_helper.py @@ -12,6 +12,7 @@ from typing import Dict, List, Optional, Union import requests from PIL import Image +from src.common.api_helper import USER_AGENT from src.common.permission_utils import ( ensure_directory_permissions, get_assets_dir_mode, @@ -104,7 +105,7 @@ class LogoHelper: # Session for HTTP requests self.session = requests.Session() self.session.headers.update({ - 'User-Agent': 'LEDMatrix-Common/1.0', + 'User-Agent': USER_AGENT, 'Accept': 'image/*', }) diff --git a/test/test_http_headers.py b/test/test_http_headers.py index 3f43b819..bc5836a1 100644 --- a/test/test_http_headers.py +++ b/test/test_http_headers.py @@ -33,6 +33,13 @@ class TestSharedHeaders: def test_api_helper_sends_the_same_user_agent(self): assert APIHelper().session.headers['User-Agent'] == USER_AGENT + def test_api_helper_does_not_hand_set_brotli(self): + assert 'br' not in APIHelper().session.headers.get('Accept-Encoding', '') + + def test_logo_helper_sends_the_same_user_agent(self): + from src.common.logo_helper import LogoHelper + assert LogoHelper(display_width=64, display_height=32).session.headers['User-Agent'] == USER_AGENT + class TestLogoDownloaderHeaders: def test_uses_the_shared_headers(self): diff --git a/test/test_logo_helper.py b/test/test_logo_helper.py index 37bc284b..9ce4eeaf 100644 --- a/test/test_logo_helper.py +++ b/test/test_logo_helper.py @@ -424,7 +424,8 @@ class TestPlaceholderLogo: class TestSessionConfiguration: def test_user_agent_and_accept_headers(self, helper): - assert helper.session.headers["User-Agent"] == "LEDMatrix-Common/1.0" + from src.common.api_helper import USER_AGENT + assert helper.session.headers["User-Agent"] == USER_AGENT assert helper.session.headers["Accept"] == "image/*"