본문으로 바로가기

[Python] request모듈

category Language/Python 2019. 5. 16. 05:15

스마트미러 프로젝트 진행중에 있어서 요즘 가장 반복적으로 찾아보게 되는 자료인

'파이썬 request 모듈'에 대해 정리해보겠습니다.

(스마트미러 프로젝트는 나중에 한 카테고리로 모아서 정리해볼게요)

 


  • 설치법
$ pipenv install requests

 

  • 사용법

1. 기본 객체 생성

import requests

#r is response object
r = requests.get('your request url')

2. GET Request

import requests

url = "write your url"
query = {'key1': 'value1', 'key2': 'value2'}
r = requests.get(url, params = query)

파라미터를 전달해야 할 때, 쿼리 값을 dictionary형태로 만들어서 params 라는 attribute를 통해 전달합니다.

print(r.url) 을 실행해보면 올바르게 인코딩된 url을 확인할 수 있어요

 

3. POST Request

import requests

url = "write your url"
data = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, data = data)

data를 전달해야 할 때, GET과 동일한 방식으로 data attribute를 통해 전달합니다.

GET방식과의 차이점이라면 단순 text만 전달하는게 아닌 data 형식의 다양성이죠?ㅇㅅㅇ

위의 예시처럼 딕셔너리 형태를 그대로 전달할 경우 text형식으로만 데이터가 전달됩니다.

json데이터를 전달한다고 가정하에 코드를 작성해보면 아래와 같습니다.

import requests
import json

url = "write your url"
data = {'some': 'data',}
r = requests.post(url, data = json.dumps(data))

조금 더 간단하게 json데이터를 전달하는 방법으로 아래와 같은 방법도 있습니다.

data = {'some': 'data'}
r = requests.get(url, json=data)

dictionary형태의 데이터를 직접 인코딩 하지 않아도 json파라미터를 활용하면 자동으로 인코딩 됩니다.

(공식문서를 참고하니 2.4.2버전 이상에서 가능한걸로 보이네요)

 

4. Header, Cookies

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

헤더를 지정할 때는 headers 파라미터에 딕셔너리 형태의 데이터를 대입하면 됩니다.

그리고 쿠키정보를 심어서 요청을 보내야 할 때 cookies 파라미터를 사용하면 됩니다.

 

5. Response

요청이후 응답받은 데이터를 활용하게 됩니다.

응답받은 데이터의 인코딩된 속성에 맞게 데이터를 로드할 수 있습니다.

응답객체가 도대체 어떻게 인코딩된지 모른다면, 확인 가능합니다.

r.encoding()	#인코딩 형식 확인

r.text()		
r.content()		#binary응답
r.json()		#json응답
r.raw()			#row socket 응답

최근 json()을 사용해 응답데이터를 로드해 다룬 일이 많았는데

json()을 통해 json데이터를 로드하면 json데이터가 dictionary형태로 자동변환됩니다.

(json로드하면 그대로 json형태인줄알고 엄청 헤매는 바보짓을 조금 했기에..써봅니다ㅎㅎ)

 

참조공식문서: https://2.python-requests.org/en/master/user/quickstart/


반복적으로 찾아봤던 정보 위주로 작성해보았습니다.

조금 더 보다보면 머릿속에 정확히 기억될날이 오겠죠ㅜㅜ

 

틈틈히 기록할만한 공부내용을 지속적으로 기록할 생각입니다.

화이팅🤗