"""이 패키지가 밖으로 나갈 때 공통으로 쓰는 것. ★ 모듈 셋(checks·robots·notify)이 같은 UA·타임아웃·실패 처리를 쓴다. 각자 두면 "점검은 Yeti 로 받았는데 통보는 브라우저 UA" 같은 어긋남이 생기고, 그건 재현이 안 된다. """ import httpx # 네이버 검색 로봇의 실제 UA. 이걸로 받아 봐야 CDN·WAF 가 네이버만 막는 상태가 보인다. YETI_UA = "Mozilla/5.0 (compatible; Yeti/1.1; +http://naver.me/spd)" BROWSER_UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/126 Safari/537.36" TIMEOUT_SEC = 15.0 async def get(client: httpx.AsyncClient, url: str, ua: str = BROWSER_UA) -> httpx.Response | None: """실패를 예외로 올리지 않는다 — 한 항목이 죽어도 나머지 점검은 끝까지 돈다.""" try: return await client.get(url, headers={"User-Agent": ua}) except httpx.HTTPError: return None def host(origin: str) -> str: return origin.split("//", 1)[-1].rstrip("/")