requests모듈로 웹 스크래핑 시, 헤더를 조작하는 것이 의미가 있을까요?

조회수 2540회

파이썬의 requests 모듈을 통해서 데이터를 주고받으려고 하는데요,

리퀘스트 모듈을 이용하면 user-agent라던가 이런 헤더부분에 스크립트를 통한 접속인게 다 들통나는데, 혹시 임의로 host나 user-agent, origin, referrer 등을 수정하면,

일반적인 웹브라우저의 요청인것처럼 숨길 수 있을까요?

특히 host,origin, referrer는 브라우저에서 메뉴를 타고들어가야만 나오는것같은데...맞나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 숨길수 있습니다. http 를 학습해보세요. 정영훈 2019.6.20 00:36
  • 그럼 반대로 헤더를 수정한 것과, 실제 브라우저가 보내는 헤더를 서버쪽에서 구분할 수 있을까요? 알 수 없는 사용자 2019.6.22 18:17
  • 없습니다. 정영훈 2019.6.23 00:22

1 답변

  • 바꾸는 것이 의미 있는 헤더

    user-agent

    서버에게 어떤 브라우저가 쓰이는지 알려줍니다. 파이썬의 requests 모듈에서 기본값은 다음과 같습니다.

    python-requests/2.22.0
    

    누가 봐도 파이썬으로 접속하는 것을 알 수 있을 것입니다. 일부 서버는 이러한 형태의 user agent string이 감지되면 막기도 합니다. 이 user agent string을, 예를 들어 크롬 브라우저의 것으로 바꾸면 이렇게 생겼습니다.

    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36
    

    이 경우, 서버가 user agent string만으로는 크롬 브라우저인지, 파이썬 requests 모듈인지 구분할 수 없습니다.

    바꾸는 것이 의미 없는 헤더

    host

    서버의 도메인 이름입니다. 예를 들어 이 사이트에 http 요청을 보낼 경우, 다음과 같이 설정될 것입니다.

    Host: hashcode.co.kr
    

    이 헤더가 없거나, 여러 개 이거나, 엉뚱한 값으로 설정되어 있을 경우 오류가 생합니다.

    origin

    POST request를 보낼 때 요청이 어느 주소에서 왔는지를 나타냅니다. 요청을 받는 주소와 origin이 다르면 문제가 생길 수도 있다고 합니다. 어쨌든 설정하지 않을 때와 똑같이 작동하거나, 오류가 생기는 것 2가지 중 하나인데 굳이 바꿀 이유는 없을 겁니다.

    referer

    어떤 페이지를 지나 페이지를 도달했는지 알려주는 헤더입니다. 서버를 굳이 속이고 싶다면 써도 되겠지만, 보통의 경우 user-agent 정도면 바꾸면 충분할 것입니다.

    이 외의 헤더들

    여기서 다룬 것 말고도 http에는 다양한 헤더가 있습니다. 그 헤더에 대해 일일이 찾아보거나 질문을 올리는 것도 좋지만, 가장 좋은 방법은 직접 해보는 방법입니다. 헤더를 바꿔서 요청을 보내 보세요. 다음 코드를 이용하면 됨니다.

    import requests
    
    headers = requests.utils.default_headers()
    headers.update({'바꾸고 싶은 헤더 이름': '바꾼 헤더 값'})
    
    requests.get('url', headers=headers)
    requests.post('url', ..., heaers=headers)
    # 등등...
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)