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:
@@ -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)}")
|
||||
|
||||
Reference in New Issue
Block a user