2022년 06월 28일 CGV 용산 스캐너 문제 발생
아맥봇에 문제가 생겼다.
원인 파악을 위해 크롤링 하는 url로 들어갔더니 빈 화면만 출력된다.
내가 만든 크롤링봇은 CGV의 예매용 iframe 페이지에서 response를 받아 영화 오픈 여부를 확인한다.
헌데 이 페이지가 빈 화면만 보내주니 작동할 리가 없다.
CGV가 최근 홈페이지를 갈아엎었는데 그때부터 이런 증상이 생긴 것 같다.
이 iframe용 페이지에 직접 접속하면 빈 화면만 나오지만,
CGV 홈페이지를 통해 보여질 때는 내용이 잘 나온다.
그래서 CGV 홈페이지를 경유하여 iframe 페이지에 접속할 때의 request 헤더 정보를 확인한 뒤에
이를 크롤링봇에 추가하여 작동시켰더니 정보를 잘 불러웠다.
필요한 request header 정보는 다음과 같았다.
'Accept': 'text/html;',
'Accept-Language': 'ko-KR,ko;',
'Cookie': '_ga=GA1.3.857953843.1626238800;',
'Referer': 'http://www.cgv.co.kr/theaters/?areacode=01&theaterCode=0013&date=20220628',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
쿠키의 _ga는 구글 애널리틱스 같은데 이게 없으면 페이지가 안 불러와진다.
현재 가장 많이 쓰이는 텔레그램 알리미는 예매가 열리기 전에 오류가 생겨서 점검에 들어버린다.
내 알리미도 예매가 열리기 전에 오류가 생기는지 확인해야 한다.
알리미에 헤더만 추가하는 것이 아니라 페이지 정보를 불러오지 못 할 때 알림을 날리고 꺼지도록 설정했다.
가동 17분 만에 정보를 불러오지 못해 알리미가 멈춰버렸다.
어떤 개발자가 알리미 고장 사태의 원인이 CGV 측의 IP 차단이라고 추측했었는데 그게 맞는 것 같다.
똑같은 코드를 실행했는데 서버에서는 실패가 뜨고 개발 PC에서는 잘 된다.
새로고침 주기를 일부로 길게 잡았는데도 차단을 먹은 것 같다.
CGV의 IP 차단 기준은 어떻게 정해지는 것일까?
추측해 본다면
1. 규칙적인 요청이 올 시 크롤링봇으로 간주
2. 헤더가 알맞지 않은 요청이 올 시 봇으로 간주
3. CGV 홈페이지가 아니라 예매용 iframe 페이지에 바로 요청할 시 봇으로 간주
4. 요청 IP당 request 요청 회수 제한
이렇게 추측이 된다.
IP 차단이 영구적일지 일시적일지 알 수 없지만 내 PC에서 1번과 4번을 테스트해봐야겠다.
요청 간격을 길게 잡아도 차단됐으니 이번엔 난수를 사용해서 불규칙적으로 요청해본다.
그리고 몇 번 요청했는지 개수를 센다.
17분만에 멈췄고 10초 간격으로 요청을 보내니 17 * 10을 해서 대충 102라는 결과가 나온다.
다음번도 이와 비슷할지 테스트해본다.
소용없었다. 8번 만에 멈춰버리고 말았다.
또한 크롤링봇만이 아니라 브라우저를 통해 수동으로 새로고침을 해도 차단이 된다.
1. 규칙적인 요청이 올 시 크롤링봇으로 간주2. 헤더가 알맞지 않은 요청이 올 시 봇으로 간주3. CGV 홈페이지가 아니라 예매용 iframe 페이지에 바로 요청할 시 봇으로 간주
4. 요청 IP당 request 요청 회수 제한
IP 차단이 반복될수록 차단 시간이 길어지는 것 같다.
다음번엔 10초 간격이 아니라 60초 간격을 두고 점차 줄여봐야겠다.
60초 차단 1371 트라이에 차단 ( 오전 9시~ 다음날 오전 7시 50분 )
55초 차단 알 수 없음 ( 오전 9시 ~ 당일 오후 6시까지 확인 )
50초 136 트라이에 차단
오늘은 여기까지
차단 기준을 알 수가 없다.
처음 55초 간격으로 테스트를 진행했을 때는 하루 종일 잘 됐지만, 이번엔 바로 뻗어버렸다. 즉 요청 IP당 request 요청 회수 제한이 있는 것도 아니란 소리다.
1. 규칙적인 요청이 올 시 크롤링봇으로 간주2. 헤더가 알맞지 않은 요청이 올 시 봇으로 간주3. CGV 홈페이지가 아니라 예매용 iframe 페이지에 바로 요청할 시 봇으로 간주4. 요청 IP당 request 요청 회수 제한
심지어 IP가 다른 두 개의 서버로 간격을 달리하여 테스트를 진행 중인데 멈추는 건 동시에 멈춰버린다.
마치 모든 request들을 일괄 차단하는 느낌이다.
용아맥 알리미를 관짝에 넣어야 할지도 모르겠다..