Skip to content

HTTP request in Python : 'requests' module

python의 requests 모듈을 사용해 REST 프로토콜을 쉽게 다룰 수 있다. 너무 널리사용되는, 사실상의 파이선 내장모듈이라고 볼 수 있다. 참고: https://realpython.com/api-integration-in-python/ 공식문서: https://2.python-requests.org/en/master/

설치

$ pip install requests
  • 아마도 대부분의 경우 기본으로 설치되어있음

기본 사용법

basic get

get(), post(), put() 메소드를 가지고 있고 서버의 응답이 이들 메소드의 리턴이 된다. 심플하다.

import requests

URL = ''https://todolist.example.com/tasks/''
resp = requests.get(URL)
if resp.status_code == 200: # OK
  for item in resp.json():
    print(item)
else :  # something wrong
  raise ApiError(resp.status_code)
  • resp.json()의 리턴은 파이썬 오브젝트다 일반 딕셔너리나 리스트처럼 간편하게 다룰 수 있다.
  • raw data를 그대로 보려면 'resp.text' 프로퍼티를 사용하면 된다.

parameter 전달

get() 메소드에 'params=' 아규먼트를 추가해 보낸다

params = {'key':'value'}
res = requests.get('http://www.tistoty.com', params=params)
print(res.url)
# http:./www.tistody.com/?key=value

get(), post() 메소드에 'headers=' 아규먼트를 추가해 보낸다.

data 전달

post() 메소드에 'data=' 아규먼트를 추가해 보낸다.

body = {"key1": "value1", "key2": "value2" }
resp = requests.post(URL,
                     data=json.dumps(body),
                     headers={'Content-Type':'application/json'},
                     )

혹은 'data=' 대신에 'json='아규먼트를 사용하면 requests가 알아서 딕셔너리를 json으로 바꾸어준다. 아래 예는 위 코드와 동일하다.

resp = requests.post(URL,json=body)

예: Kakao api

kakao api를 사용해 위경도 -> tm좌표로 변환해보자. 참고문서: https://developers.kakao.com/docs/restapi/local#%EC%A2%8C%ED%91%9C%EA%B3%84-%EB%B3%80%ED%99%98

kakao 계정만들기 & 개발자 등록

https:// developers.kakao.com 에서 앱 개발 시작하기로 개발자 등록하고 앱키를 부여받는다.

핵심 코드

url = 'https://dapi.kakao.com/v2/local/geo/transcoord.json' #좌표계-변환
      params = {'x':longitude, 'y':latitude, 'input_coord':'WGS84', 'output_coord':'TM'}
      headers = {'Authorization': 'KakaoAK '+ KakaoAK}
      resp = requests.get(url, params = params, headers = headers)

      if resp.status_code == 200: # OK
          #test
          print(resp.json())

          tmX = resp.json()['documents'][0]['x']
          tmY = resp.json()['documents'][0]['y']

          #test
          print('tmX: %s, tmY: %s' %(tmX, tmY))

      else:
          print('kakao Error')