관리 메뉴

소나기

Python requests 라이브러리 설치 및 사용방법 본문

연구/Network

Python requests 라이브러리 설치 및 사용방법

moyoung 2022. 9. 29. 14:22

출처: https://requests.readthedocs.io/en/latest/

Requests 는 간단한 HTTP 라이브러리인데, 요새 내가 하는 5G Core 프로젝트에서 각 컴포넌트의 기능이 모두 웹 서버이기 때문에 아래 라이브러리를 사용해서 요청하고 응답 받는 식으로 데이터를 주고 받고 있다.

r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
r.status_code
// 200
r.headers['content-type']
// 'application/json; charset=utf8'
r.encoding
// 'utf-8'
r.text
// '{"type":"User"...'
r.json()
// {'private_gists': 419, 'total_private_repos': 77, ...}

설치는 아주 간단하다.

 

  1. 설치

파이썬 pip으로 자동 설치 하는 경우 아래 명령어로 설치한다.

$ python -m pip install requests

소스코드로부터 설치하고 싶으면 아래 오픈소스를 이용한다.

$ git clone git://github.com/psf/requests.git
  1. 요청 보내기

라이브러리를 불러온다.

import requests

이제 웹페이지를 가져온다.

r = requests.get('https://localhost/')

요청을 보내게 되면 객체 r에는 요청의 응답이 저장된다. 그리고 요청에 관련된 모든 정보는 바로 이 r에 저장된다.
GET 외에도 POST도 사용 가능하다. 이때 데이터를 삽입하는 방법은 다음과 같다.

r = requests.post('https://httpbin.org/post', data={'key': 'value'})

그리고 PUT, DELETE, HEAD 그리고 OPTIONS 도 아래와 같이 가능하다.

r = requests.put('https://httpbin.org/put', data={'key': 'value'})
r = requests.delete('https://httpbin.org/delete')
r = requests.head('https://httpbin.org/get')
r = requests.options('https://httpbin.org/get')
  1. URLs에서 매개변수 전달

URL로 쿼리를 요청할때 데이터를 보내고 싶은 경우가 많다. URL을 직접 구성하는 경우 이 데이터는 URL에서 물음표 뒤에 키/값 쌍으로 제공된다(예: httpbin.org/get?key=val. 요청을 사용하면 params키워드 인수를 사용하여 이러한 인수를 문자열 사전으로 제공할 수 있다. 예를 들어 httpbin.org/get 로 key1=value1 나 key2=value2 을 전달 하려면 다음 코드를 사용한다.

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('https://httpbin.org/get', params=payload)

URL을 인쇄하여 URL이 올바르게 인코딩 되었음을 확인한다.

print(r.url)
https://httpbin.org/get?key2=value2&key1=value1

Json 이나 리스트도 보낼수 있다.

payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

r = requests.get('https://httpbin.org/get', params=payload)
print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
  1. 응답 내용 확인하기
import requests

r = requests.get('https://api.github.com/events')
r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
Requests will automatically decode content from the server. Most unicode charsets are seamlessly decoded.

요청은 서버의 콘텐츠를 자동으로 디코딩한다. 대부분의 유니코드 문자 집합은 원활하게 디코딩된다.

요청을 하면 Requests는 HTTP 헤더를 기반으로 응답 인코딩에 대해 추측한다. 에 액세스할 때 Requests에서 추측한 텍스트 인코딩이 사용된다.
r.text. r.encoding와 같은 속성 이름을 사용하여 Requests가 사용 중인 인코딩을 찾고 변경할 수 있다.

r.encoding
'utf-8'
r.encoding = 'ISO-8859-1'

인코딩을 변경하면 요청은 r.encoding 를 호출할 때마다 새 값을 사용한다. 그리고 r.text 콘텐츠 인코딩이 무엇인지 알아낼 수 있다. 예를 들어 HTML과 XML은 본문에 인코딩을 지정할 수 있는 기능이 있다. 이와 같은 상황에서는 r.content를 사용하여 인코딩을 찾은 다음 r.encoding 을 설정해야 한다. 이렇게 하면 r.text를 올바른 인코딩으로 사용할 수 있다.

요청은 필요한 경우 사용자 지정 인코딩도 사용한다. 고유한 인코딩을 생성하여 codecs 모듈에 등록한 경우 코덱 이름을 값으로 사용하기만 하면 r.encoding 요청이 디코딩을 처리한다.

Comments