2025.8.20: Requests 라이브러리

jiyongg·2025년 8월 20일

TIL: Today I Learned

목록 보기
26/30

오늘도 해커톤 프로젝트를 계속 진행하고 있다. 리팩토링도 하고 테스트 코드도 좀 작성해놔야 하는데 기능 추가만으로도 정신이 없다.. 이번 프로젝트에서는 백엔드 앱이 외부 API와 통신을 할 필요가 있어서, 오늘은 Requests 라이브러리를 간단하게 사용해 보고 정리했다.

Requests

파이썬에서 HTTP 요청을 보내고 응답을 받는 라이브러리

Requests: HTTP for Humans™ — Requests 2.32.5 documentation

예시: 카카오맵의 REST API에 요청 보내기

1. 설치

$ pip install requests

2. 요청 보내기

import requests

kakao_rest_api_key = 'REST API 키'
auth_header = {'Authorization': f'KakaoAK {kakao_rest_api_key}'}
keyword = '서울역'
payload = {'query': keyword}
r = requests.get('https://dapi.kakao.com/v2/local/search/keyword', headers=auth_header, params=payload)
  • 키워드를 바탕으로 장소 검색하는 예제
  • 카카오맵의 REST API를 사용할 때에는 헤더에 Authorization: KakaoAK ${카카오 REST API 키}가 필수로 있어야 함
    • Authorization이 헤더 key에 해당하고, KakaoAK부터는 value에 해당
  • headers: 헤더 딕셔너리 / params: Query Parameter

3. 응답 확인하기

response_text = r.text
response_json = r.json()
  • text@property이며, json은 메소드임에 유의
  • text 값은 str 형태이고, json 메소드의 반환값은 파이썬 객체임에 유의
    • 헷갈리면 자바스크립트의 사례를 생각하면 됨
      • Response.text()는 문자열 타입으로 resolve됨
      • Response.json()이 JSON이 아닌 자바스크립트 객체로 resolve됨

4. 응답 예시

print(f"텍스트: {response_text}"[:374], type(response_text))
print(f"파이썬 객체: {r.json()}"[:391], type(response_json))
텍스트: {"documents":[{"address_name":"서울 중구 봉래동2가 122-11","category_group_code":"","category_group_name":"","category_name":"교통,수송 \u003e 기차,철도 \u003e 기차역 \u003e KTX정차역","distance":"","id":"9113903","phone":"1544-7788","place_name":"서울역","place_url":"http://place.map.kakao.com/9113903","road_address_name":"서울 중구 한강대로 405","x":"126.97070335253385","y":"37.55406888733184"},{" <class 'str'>
파이썬 객체: {'documents': [{'address_name': '서울 중구 봉래동2가 122-11', 'category_group_code': '', 'category_group_name': '', 'category_name': '교통,수송 > 기차,철도 > 기차역 > KTX정차역', 'distance': '', 'id': '9113903', 'phone': '1544-7788', 'place_name': '서울역', 'place_url': 'http://place.map.kakao.com/9113903', 'road_address_name': '서울 중구 한강대로 405', 'x': '126.97070335253385', 'y': '37.55406888733184'}, {'addr <class 'dict'>

원문은 너무 길어서 슬라이싱했음

profile
그냥 쓰고 싶은 것 쓰는 개발(?) 블로그

0개의 댓글