Python에서 HTTP 요청을 보내는 모듈인 requests를 간단하게 정리하고자 한다.

0. 기본적인 사용 방법

import requests
URL = 'http://www.tistory.com'
response = requests.get(URL)
response.status_code
response.text

python-requests-get-example

웹브라우져에서 티스토리를 접속한 것과 똑같은 이야기이다. www.tistory.com 이라는 주소로 GET 요청(request)를 보냈고 서버에서는 그 요청을 받아 뭔가를 처리한 후 요청자인 나에게 응답(response)를 줬다. 우선 그 응답은 200 상태코드와 함께 왔다. 이는 티스토리 서버에서 잘 처리되어서 정상적인 응답을 보내줬다는 OK 싸인을 의미한다. 그리고 응답의 내용은? 보시다시피 HTML 코드.

1. GET 요청할 때 parameter 전달법

params = {'param1': 'value1', 'param2': 'value'}
res = requests.get(URL, params=params)

python-requests-post-example

응답 객체인 res를 통해서 내가 실제로 던진 URL이 뭔지 확인해보았다. 내가 준 URL과 파라미터를 requests 모듈이 엮어서 적절한 새로운 요청을 만든 것이다. 내가 직접 URL을 저렇게 타이핑하는 것보다 파라미터를 딕셔너리 형식으로 정리하고 requests 모듈에 던져주는 것이 훨씬 좋다고 생각한다.

2. POST 요청할 때 data 전달법

위의 내용과 같다, params 대신 data라는 이름으로 주면 된다.

data = {'param1': 'value1', 'param2': 'value'}
res = requests.post(URL, data=data)

조금 더 복잡한 구조로 POST 요청을 해야 할 때가 있다. 이럴 때는 위의 방법처럼 순진하게 주면 안된다. 우리가 인지하고 있는 그 딕셔너리의 구조를 유지하면서 문자열로 바꿔서 전달해줘야 하는데(?), python에서 이 노동을 해주는 친구가 json 모듈이다.

import requests, json
data = {'outer': {'inner': 'value'}}
res = requests.post(URL, data=json.dumps(data))

3. 헤더 추가, 쿠키 추가

별도의 헤더 옵션을 추가하고자 할 때는 headers 옵션을, 쿠키를 심어서 요청을 보내고 싶으면 cookies 옵션을 사용하면 된다

headers = {'Content-Type': 'application/json; charset=utf-8'}
cookies = {'session_id': 'sorryidontcare'}
res = requests.get(URL, headers=headers, cookies=cookies)

4. 응답(Response) 객체

요청(request)을 보내면 응답(response)을 받는다. 당연히 이 응답은 python 객체로 받는다. 그리고 이 응답 객체는 많은 정보와 기능을 가지고 있다. ipython이나 jupyter notebook에서 <탭> 기능을 이용해서 직접 체험해보면 금방 파악이 가능하지만 여기에 몇 가지만 기록하겠다.

python-requests-response-objectipython 환경에서 res.<탭>을 통해 어떤 요소 및 함수가 있는지 살펴볼 수 있다.


res.request # 내가 보낸 request 객체에 접근 가능
res.status_code # 응답 코드
res.raise_for_status() # 200 OK 코드가 아닌 경우 에러 발동
res.json() # json response일 경우 딕셔너리 타입으로 바로 변환

추후에 시간이 된다면 SSL 인증에 관한 내용도 추가하도록 하고 싶다, 더 잘 알게 된다면.


참고 링크

공식 문서
http://docs.python-requests.org/en/master/user/quickstart/