[Crawling] - requests 스크랩핑(Session)

김진수·2020년 12월 2일
1
post-thumbnail

Cookie? Session?

웹은 대다수가 HTTP기반으로 동작합니다. 하지만 HTTP가 구현된 방식에서 웹 서버와 클라이언트는 지속적으로 연결을 유지한 상태가 아니라 요청(request)-응답(response)의 반복일 뿐이기 때문에, 이전 요청과 새로운 요청이 같은 사용자(같은 브라우저)에서 이루어졌는지를 확인하는 방법이 필요합니다. 이 때 등장하는 것이 ‘쿠키’와 ‘세션’입니다.

쿠키는 유저가 웹 사이트를 방문할 때 사용자의 브라우저에 심겨지는 작은 파일인데, Key - Value 형식으로 로컬 브라우저에 저장됩니다. 서버는 이 쿠키의 정보를 읽어 HTTP 요청에 대해 브라우저를 식별합니다.

그러나, 쿠키는 로컬에 저장된다는 근원적인 문제로 인해 악의적 사용자가 쿠키를 변조하거나 탈취해 정상적이지 않은 쿠키로 서버에 요청을 보낼 수 있습니다. 만약 ‘로그인 하였음’이라는 식별을, 로컬 쿠키만을 신뢰해 로그인을 한 상태로 서버가 인식한다면 쿠키 변조를 통해 마치 관리자나 다른 유저처럼 행동할 수도 있는 것이죠.(굉장히 위험합니다.)

이로 인해 서버측에서 클라이언트를 식별하는 ‘세션’을 주로 이용하게 됩니다.

세션은 브라우저가 웹 서버에 요청을 한 경우 서버 내에 해당 세션 정보를 파일이나 DB에 저장하고 클라이언트의 브라우저에 session-id라는 임의의 긴 문자열을 줍니다. 이때 사용되는 쿠키는 클라이언트와 서버간 연결이 끊어진 경우 삭제되는 메모리 쿠키를 이용합니다.

requests의 Session

requests모듈에는 Session이라는 도구가 있습니다.

Session은 위와같이 만들 수 있습니다.

requests.Session()을 이용해 url를 가져오고 여러 타입으로 출력해보겠습니다.

위 코드는 requests에서 제공하는 get방식을 통해 url를 가져오는 부분입니다. url를 가져오는 get방식말고 post방식이 있는데 이부분은 추후에 포스팅 하겠습니다.

위 코드는 가져온 url를 text형식으로 출력하는 부분입니다. text외에 string도 많이 쓰이는 편입니다.

위 코드는 requests를 통해 url를 연결할 때 정상적으로 연결이 되는지 확인하는 코드입니다.

위 코드는 ok 메서드를 통해 연결이 정상적으로 되었는지 확인하는 코드입니다. True가 출력되면 정상적으로 연결이 된 것입니다.

profile
백엔드 개발자

0개의 댓글