fix: Carmodoo session expiry causing all searches to return 0 results

Detect GoLogin redirect response (126 bytes) when session cookies expire,
automatically re-login and retry the search once.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
AutonetSellCar Deploy
2026-02-18 08:42:27 +09:00
parent fb3f3f6127
commit 30888c1434

View File

@@ -158,6 +158,14 @@ class CarmodooClient:
print(f"Carmodoo login error: {e}")
return False
def _is_login_redirect(self, content: bytes) -> bool:
"""응답이 로그인 리다이렉트인지 확인"""
if len(content) < 200:
text = content.decode('utf-8', errors='replace')
if 'GoLogin' in text or 'goLogin' in text:
return True
return False
async def search_cars(
self,
maker_code: Optional[str] = None,
@@ -172,7 +180,8 @@ class CarmodooClient:
transmission: Optional[str] = None,
complex_code: Optional[str] = None, # 단지 코드
page: int = 1,
page_size: int = 50
page_size: int = 50,
_retry: bool = False
) -> List[dict]:
"""차량 검색 (POST 방식 AJAX API 호출)"""
@@ -270,6 +279,29 @@ class CarmodooClient:
print(f"[search_cars] Response status: {response.status_code}, content length: {len(response.content)}")
# 세션 만료 감지 → 재로그인 후 재시도
if self._is_login_redirect(response.content):
if not _retry:
print("[search_cars] Session expired (GoLogin detected), re-logging in...")
self.is_logged_in = False
self.cookies = None
login_result = await self.login()
print(f"[search_cars] Re-login result: {login_result}")
if login_result:
return await self.search_cars(
maker_code=maker_code, model_code=model_code,
year_min=year_min, year_max=year_max,
mileage_min=mileage_min, mileage_max=mileage_max,
price_min=price_min, price_max=price_max,
fuel=fuel, transmission=transmission,
complex_code=complex_code,
page=page, page_size=page_size,
_retry=True
)
else:
print("[search_cars] Session expired even after re-login, giving up")
return []
if response.status_code == 200:
html = self._decode_response(response.content)
print(f"[search_cars] Decoded HTML length: {len(html)}")