From 93f13795bb0f43a62b50585960a4023636ae7c65 Mon Sep 17 00:00:00 2001 From: lekss361 Date: Mon, 11 May 2026 18:46:47 +0300 Subject: [PATCH] =?UTF-8?q?fix(poi-sync):=20add=20User-Agent=20header=20?= =?UTF-8?q?=E2=80=94=20Overpass=20returns=20406=20for=20python-httpx=20def?= =?UTF-8?q?ault=20UA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/services/site_finder/poi_loader.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/app/services/site_finder/poi_loader.py b/backend/app/services/site_finder/poi_loader.py index a4bba280..e70e0053 100644 --- a/backend/app/services/site_finder/poi_loader.py +++ b/backend/app/services/site_finder/poi_loader.py @@ -64,10 +64,19 @@ def _classify(tags: dict[str, str]) -> str | None: async def fetch_overpass() -> list[dict]: - """Запросить Overpass API, вернуть список raw OSM elements.""" + """Запросить Overpass API, вернуть список raw OSM elements. + + NB: Overpass блокирует default `python-httpx/*` User-Agent (отдаёт 406). + Передаём явный UA с контактом проекта — это требование Overpass usage + policy (https://operations.osmfoundation.org/policies/api/). + """ query = _build_overpass_query() logger.info("Overpass: отправляем запрос (%d символов)", len(query)) - async with httpx.AsyncClient(timeout=120) as client: + headers = { + "User-Agent": "GenDesign-SiteFinder/1.0 (+https://gendsgn.ru)", + "Accept": "application/json", + } + async with httpx.AsyncClient(timeout=120, headers=headers) as client: r = await client.post(OVERPASS_URL, data={"data": query}) r.raise_for_status() elements: list[dict] = r.json().get("elements", [])