Python requests 모듈

HTTP 프로토콜을 이용해서 서버에 무엇인가를 요청할 때 사용하는 방식은 대표적으로

GET , POST이다.

이는 requests 모듈을 통해 가능하다.

설치

pip install requests

cmd에 위의 명령을 통해 requests 모듈을 설치할 수 있다.

요청(request)

GET 통신하기

#get 통신

import requests

data = {"key": "value"}

url = "https://yeedacoding.github.io/"		#내 블로그 주소

response = requests.get(url, params=data)

print(response.url)

get()함수로 요청을 할 시 파라미터는 urlparams를 입력받아 넘기게 된다.

url에는 API통신을 할 URL 주소를 입력해주고

params 에는 데이터를 넘길 파라미터들이 있는 data변수를 입력해준다.

결괏값을 보도록 하자.

https://yeedacoding.github.io/?key=value

GET 방식으로 통신을 하게 되면 요청 시 필요한 정보를 URL의 ? 뒤에 key=value형태로 보내준다.

예를 들어서 ? 표 뒤로,

?code=1234&page=1

이런 식으로 표현되는 것은 두 가지 key와 value를 보내준 것이고 key=value는 &로 연결된다.

또한 1234라는 코드를 가진 url의 1번 page라는 것을 보자마자 알 수 있다. 이렇게 GET 방식은 URL에 요청한 정보가 이어 붙기 때문에 파라미터들이 바로 노출이 되기도 하고, 길이 제한도 있어 많은 양의 데이터를 보내기 어렵다.

POST 통신하기

#post 통신
import requests

data = {'key' : 'value'}

url = "https://yeedacoding.github.io/"

response = requests.post(url, data = data)

get방식과는 거의 차이가 없지만 post 방식은 파라미터로 데이터를 넘길 때 params가 아닌 data 파라미터를 사용한다는 차이가 있다.

get은 url 내에 ?뒤에 key=value 형태로 보내주지만 post는 body안에 보내준다는 차이도 있다. 그렇기에 get보다 상대적으로 많은 양의 보내기에 적합하다.

헤더, 쿠키 추가하기

open API를 활용하게 되면 각 제공처에서 제시해주는 요청 양식이 있는데 이때 header나 cookie 값을 파라미터로 같이 넘겨야 하는 경우가 있다.

afeae

위는 카카오 developer에서 이미지 검색 api에 대한 양식인데 REST API키를 헤더에 담아 GET으로 요청하라고 명시되어있다. 이러한 경우에는 요청 시 headers를 세팅해주면 된다.

import requests

datas = {
    'key1' : 'value1',
    'key2' : 'value2'
}

headers = {"Authorization" : "KakaoAK {REST_API_KEY}"}

#cookie 값이 필요하다면
cookies = {"ck_test" : "cookies_test"}

response = requests.get(url, params=datas, headers=headers, cookies=cookies)

응답(response)

요청을 하면 그에 대한 응답 값이 있을 것이다. 가장 먼저 살펴보아야 할 것은 HTTP의 상태 코드(Status Code)이다.

응답 코드는 여러 가지가 있으며 요청에 대한 응답이 정상적으로 이루어졌다면 status code는 200이다.

import requests

data = {"key": "value"}

url = "https://yeedacoding.github.io/"		#내 블로그 주소

response = requests.get(url, params=data)

print(response)

af3wf

내 블로그 주소를 요청했더니 정상적인 응답이 이루어졌다는 의미인 [200]이 출력되었다.

open API의 각 제공처에서 Response시 어떠한 형태로 보내주는지 명시되어있다. 위의 카카오 developer의 예시에 ‘‘응답 바디는 JSON객체입니다’‘라고 명시되어 있는 것을 볼 수 있다.

응답이 json 포맷인 경우에는 .json(), 텍스트 포맷인 경우에는 .txt, 이미지와 같은 바이트 형식의 경우는 content로 확인할 수 있다.(ex> response_result = response.json())