크롤링

nagang·2022년 1월 8일
0

웹페이지를 코드상에서 접근할 때 시도를 한 방법들을 정리해보았다.
사용 언어는 JavaScript이다.

코드상에서 접근 시도

Axios로 요청하기

await axios.get('https://ipinfo.io/');

처음은 단순히 axios로 요청을 날린다. 만약 크롤링 시 반드시 Proxy를 통해야 한다면 이 단계에서 성공을 해도 Proxy 서버를 통해서 요청하는 것이 좋다.

Axios로 Proxy 서버를 통해서 요청하기

await axios.get('https://ipinfo.io/', {
  proxy: {
    host: proxy host (public IP),
    port: proxy port
  },
  timeout: 30000
});

Axios로 GET 요청을 보낼 때 config에 proxy 설정을 하게되면 해당 서버를 통해서 요청할 수 있다.

만약에 이 방법으로도 Error가 발생하면 Proxy가 차단을 당한 것인지 headers에 문제가 있는 것인지 확인하기 위해 아래 단계를 수행해야한다.

1 단계: Proxy 확인

2 단계: Headers 확인

위 단계를 수행할 때 브라우저나 Fiddler, postMan을 사용할 경우 쿠키와 세션을 전부 삭제하면서 확인하는 것이 중요하다.

1단계: Proxy 확인

Proxy 서버로 curl을 날려보기

proxy server로 들어가서 curl을 날려보자

curl https://ipinfo.io/

만약 차단을 당했다면 아래와 같이 Access Denied가 확인된다.

FireFox로 Proxy 설정하여 접근하기

FireFox로는 수동 Proxy를 설정하는 것이 가능하다. FireFox에서 홈페이지에서 접근이 가능하다면 헤더가 잘못되있을 확률이 크다.

수동 Proxy 설정 방법
1. FireFox 설정 → 일반 → 네트워크 설정에서 설정 버튼을 누른다.

  1. 수동 프록시 설정을 체크한 후 HTTP 프록시에 Proxy host(public IP, public DNS), 포트에 Proxy port를 적어준다. (proxy 서버가 열려있는 포트) HTTPS에도 이 프록시를 사용에도 체크한다.

2단계: Headers 확인

무슨 헤더가 필수적으로 필요한지 확인이 필요하다.

Cookie가 필수적으로 필요하다면 만료가 되는지 확인해본다. 만료가 된다면 재발급 받는 방법을 찾아야한다.

FireFox, Chrome 등 웹 브라우저 사용하기

네트워크 탭을 열면 각 HTTP 요청 정보를 볼 수 있다. Axios 헤더에 페이지를 불러오는 요청 헤더의 값을 똑같이 넣어서 요청을 해보면 된다. 한번에 복사를 하고 싶다면 해당 요청에 우클릭을 해서 Fetch로 복사나 요청 헤더 복사를 한다.

Fetch 복사의 경우 Cookie까지 복사가 되지 않기 때문에 요청 헤더를 권장한다.

Fiddler 사용하기

Fiddler를 사용하면 HTTP 패킷을 바로 볼 수 있다. 또한 Composer에서 요청을 할 수도 있다.

단 Composer에서 요청을 했을 때 처음에는 잘 요청되다가 시간이 지나서 Cookie나 인증 부분이 만료될 경우 오류가 발생할 수 있으므로 코드에서 시도하는 것을 추천
→ 이 경우 인증을 위해 다른 페이지 호출이 필요할 수도 있다.

profile
backend 개발자입니다.

0개의 댓글