파이썬 강의/requests

파이썬 rquests 3. header와 cookie

마리사라 2021. 1. 14. 13:48
반응형

파이썬 requests 3번째 강의는 header와 cookie입니다.

 


0. 기초 설명

(1) header

예전의 requests의 0번 강의에서 대부분의 웹사이트는 HTTP 통신으로 이루어진다고 말씀드렸습니다.

2020/12/09 - [파이썬/requests] - 파이썬 requests 0. 파이썬으로 HTTP 통신하기

 

파이썬 requests 0. 파이썬으로 HTTP 통신하기

이번 시간부터 파이썬으로 HTTP통신을 하게 해주는 requests모듈에 관해 강의해 보려고 합니다. 우선 기본적으로 requests 모듈을 배우시려고 찾아오신 분들이 http 통신을 모르시진 않겠지만, http 통

marisara.tistory.com

해당 강의에서 사이트를 접속할 때, GET 헤더를 서버에 전송한다고 말씀드렸습니다. 대부분의 브라우저는 헤더를 자동으로 지정해 주지만, 파이썬을 통해 HTTP 통신을 하게 될 경우에는 거의 대부분의 정보를 담지 않습니다.

파이썬 requests로 보낸 헤더
크롬 브라우저로 보낸 헤더

몇몇 사이트에서는 python-requests라는 Agent를 인식하지 못해서 제대로 된 정보를 보내주지 않는 경우도 있습니다. 그럴 땐 requests에서 헤더를 직접 지정해 줄 수 있습니다.

 

(2) cookie

쿠키는 HTTP에서 사용자의 정보를 저장하는 데이터입니다. 사용자가 사이트에 방문하면 서버에서는 쿠키라고 하는 데이터를 사용자의 컴퓨터에 저장시키고, 다음에 다시 방문하면 그 쿠키를 통해 빠르게 정보를 처리하는 역할을 합니다.

크롬 - F12(디버그) - Application - Cookies

이러한 쿠키는 서버에서 HTTP 응답 코드를 보낼 때 같이 보내집니다.

출처 : 위키백과

서버에서 위와 같은 코드를 보내게 되면, 브라우저에서는 해당 쿠키를 저장하고, 해당 사이트를 다시 접속할 때 쿠키를 HTTP에 포함하여 제출합니다.

출처 : 위키백과


1. 실전 코드

헤더와 쿠키를 설정하는 방법은 모든 사이트에 공통으로 적용됩니다.

reqeusts(url=url, headers=header, cookies=cookie)

header를 설정하는 파라미터는 headers, cookie를 설정하는 파라미터는 cookies에 넣어주시면 됩니다.

 

header와 cookie는 모두 딕셔너리 자료형이나 josn으로 입력해야 합니다. 딕셔너리나 json의 이름이 header나 cookie의 name, 내용이 value값이 됩니다.

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
          'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'}
cookie = {'name': 'marisara'}

예시로 위와 같은 헤더와 쿠키를 설정하고 아무 사이트에 보내보겠습니다.

header와 cookie를 설정하고 파이썬 requests로 보낸 헤더

위 사진에서 User-Agent값이 python-requests에서 chrome의 헤더로, cookie값이 제가 설정했던 cookie값으로 들어간 것을 볼 수 있습니다.


2. 마치며

header와 cookie는 모든 사이트에서 사용하는 값입니다. 그렇기 때문에 header와 cookie값을 조절하면 브라우저에서 보내는 정보처럼 보내거나 ID나 PW값을 쿠키에 포함시켜서 로그인된 상태로 접속할 수도 있습니다.

 

import requests

url='http://naver.com'
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                            'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'}
cookie = {'name': 'marisara'}
print(requests.get(url=url, headers=header, cookies=cookie))
반응형