신규 블로그를 만들었습니다!

2020년 이후부터는 아래 블로그에서 활동합니다.

댓글로 질문 주셔도 확인하기 어려울 수 있습니다.

>> https://bluemiv.tistory.com/

Python3 requests 모듈

API를 사용할 때, 주로 사용하곤 하는 requests 모듈에 대해 살펴보려 합니다. 사용하는 방법은 매우 쉽습니다. 사용을 할때는 보통 HTTP 메소드(method, 또는 함수)의 GET 과 POST를 사용합니다.

73557-1b-tmq58jrdbpp-cb4sdj5g.jpeg
다운로드

GET을 사용할 때는 requests.get()을 사용하고, POST를 사용할때는 requests.post()를 사용합니다. 예제를 통해 더 자세히 살펴보도록 하겠습니다. 그전에 우선 설치하는 방법을 알아보도록 하겠습니다.

 

1. requests 모듈 설치

requests 모듈을 사용하기 위해서는  pip를 통해 설치를 해야 합니다. pip는 python 3.4이상 버전부터는 자동으로 같이 설치가 되기 때문에, 따로 설치할 필요없습니다. 아래 명령어를 통해 requests 모듈을 설치합니다.

 

pip install requests​

 

참고

만약 proxy 서버가 존재하는 경우, --proxy ip:port 옵션을 추가하면 됩니다. 예를들어보면

pip install --proxy 123.123.123.123:3128 모듈명​

 

보통 집에서 사용할때는 proxy를 사용 안하기 때문에 옵션을 넣을 필요 없습니다.

 

2. 사용해보기

네이버와 구글에 GET 요청을 보내보도록 하는 예제를 살펴보겠습니다.

import requests

url = "http://www.naver.com"
response = requests.get(url)

print("status code :", response.status_code)​

 

 

결과는 위와 같습니다. 응답코드로 200 Okay가 넘어오고, 정상적으로 값을 받았다는것을 알 수 있습니다. 응답코드를 모르시는 분은 한번 살펴보시고 오시길 바랍니다. 

 

POST 메소드를 사용하는 방법도 간단합니다. get() 메소드가 아닌 post() 메소드를 사용하면 됩니다.

import requests

url = "http://www.naver.com"
#response = requests.get(url)
response = requests.post(url)

print("status code :", response.status_code)​

 

결과 값은 위와 똑같이 200 Okay 값이 넘어오는 것을 알 수 있습니다. 이번에는 더 나아가서, 데이터를 같이 보내고 싶을때는 어떻게 하는지 살펴보도록 하겠습니다.

 

3. 데이터와 같이 보내기

3-1. GET으로 parameter 넘기기

get 메소드에서는 데이터를 보낼때 2가지 방법이 존재합니다.

 

첫번째 방법 - 직접 파라미터 넣어서 보내기

import requests

url = "http://www.naver.com?a=bbb&b=123"
response = requests.get(url)

print("status code :", response.status_code)​

 

두번째 방법 - dictionary 이용하기

import requests

paramDict = {
    "a" : "bbb",
    "b" : 123
}
url = "http://www.naver.com"

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

print("status code :", response.status_code)​

2번째 방법을 사용할때는, get 메소드의 params 인자값에 key:value 형식의 자료형을 넣어줍니다.

parameter 형태

자료형이름 = { "param1" : "value1", "param2" : "value2", 계속해서 추가... }

 

똑같은 기능을 수행하지만 위와같이 2가지 방법이 존재합니다.

 

3-2. POST로 data 보내기

post로 보낼때는 url 주소에 파라미터를 넣지 않기 때문에 위 2번째 방법과 같이 보내야 합니다. 하지만, 1가지 다른점이 존재합니다. get메소드에서는 params 인자를 사용하지만, post 메소드에서는 data라는 인자를 사용합니다. 예제를 살펴봅시다.

import requests

#paramDict = {
datas = {
    "a" : "bbb",
    "b" : 123
}
url = "http://www.naver.com"

#response = requests.get(url, params=paramDict)
response = requests.post(url, data=datas)

print("status code :", response.status_code)​

 

4. SSL 인증서를 사용하는 경우

요즘은 보안때문에 http보다 https를 많이 사용합니다. 간혹 SSL 때문에 오류가 발생하곤 하는데 그럴때는 verify 옵션을 넣어주면 됩니다. 예제를 살펴봅시다.

import requests

url = "https://www.naver.com"
response = requests.post(url, verify=False)

print("status code :", response.status_code)​

verify 옵션을 넣을때는 False로 해서 넣어줍니다. default 값은 True 입니다.

 

5. 인증이 필요한 경우

API를 사용할때 key 토큰을 할당받아서 사용하기도 하지만, id와 password를 통해 인증을 하는 경우도 있습니다. 이때는 auth 옵션을 사용합니다.

import requests

url = "https://www.naver.com"
response = requests.post(url, auth=("id","pass"))

print("status code :", response.status_code)​
auth=(아이디, 비밀번호)와 같은 형태로 넣어주면 됩니다.
 

6. 그 밖에 다른 옵션들

앞에서는 params와 data, verify, auth를 살펴봤습니다. 이밖에도 다른 옵션들이 많이 있습니다. headers, cookies, timeout 등등이 있습니다.
headers = {'Content-Type': 'application/json; charset=utf-8'}
cookies = {'sessionKey': 'sessionValue'}
timeout = 3
​
 
 

샘플코드

저는 보통 사용할 때, 조건문을 이용해서 응답코드에 따라 다른 로직을 처리하도록 만드는 편입니다. 정상적으로 값을 받아오면 200코드를 받아옵니다. 반면 잘못된 url을 넣으면 4xx 코드가 넘어옵니다.
import requests

url = "https://www.naver.com"
#url = "https://www.test.com"
rs = requests.post(url)

# response code
rs_code = rs.status_code

if int(rs_code) == 200 :
    print("Okay")
    rs_text = rs.text
    print(rs_text)
else :
    print(rs_code)
    print("Fail")​
 
정상적인 url로 요청할 때

 

존재하지않는 url로 요청할 때

 


 

 

 

관련된 글

2018/08/29 - [Language/Python] - Python :: 파이썬을 사용하는 이유? (프로그래밍 언어)

2018/08/30 - [Language/Python] - Python :: 파이썬 개발도구, IDLE 과 서브라임 텍스트 (설치 및 다운로드)

2018/09/03 - [Language/Python] - Python :: 파이썬 문자열(string) 알아보기(이스케이프 문자, 인덱싱, 슬라이싱)

2018/09/08 - [Language/Python] - Python :: 파이썬 리스트(List) 사용방법과 여러가지 메소드

2018/09/19 - [Language/Python] - Python :: 파이썬 튜플(Tuple) 자료형 개념과 사용방법

 


Reference

http://docs.python-requests.org/en/master/

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기