fix(sec): resp.get_encoding() 버그 수정 — 504 직접 원인

content.read()로 body를 읽은 후 resp.get_encoding() 호출 시
aiohttp 내부 self._body(None) 접근으로 예외 발생.
이 예외가 except Exception에 잡혀 6번 retry + 지수 backoff(최대 ~22초)
→ asyncio.wait_for 캔슬 → TimeoutError → 504.

Content-Type 헤더에서 charset 직접 파싱으로 교체.
기본값 utf-8, SEC는 대부분 charset 미지정이므로 실질적으로 항상 utf-8 사용.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
main
I Luk Kim 5 months ago
parent fb6a099e50
commit 45d1469332

@ -393,7 +393,16 @@ class SECHttpClient:
raise ValueError( raise ValueError(
f"Response exceeded {max_bytes} byte limit" f"Response exceeded {max_bytes} byte limit"
) )
text = raw.decode(resp.get_encoding() or "utf-8", errors="replace") # Parse charset from Content-Type header directly;
# resp.get_encoding() needs resp.read() body which we didn't call.
ctype_hdr = resp.headers.get("Content-Type", "")
encoding = "utf-8"
for part in ctype_hdr.split(";"):
part = part.strip()
if part.lower().startswith("charset="):
encoding = part[8:].strip().strip('"') or "utf-8"
break
text = raw.decode(encoding, errors="replace")
else: else:
text = await resp.text() text = await resp.text()
if _is_sec_block_page(text): if _is_sec_block_page(text):

Loading…
Cancel
Save