오늘은 파이썬에서 requests 를 이용하여
GET방식, POST 방식으로
API 통신하는 방법을
정리해보고자 합니다.
파이썬에서는 API통신을 할 때
여러가지 방법들이 많이 있습니다.
저는 이 중에 제일 기본이라고 할 수도 있는
requests 에 대해서 정리를 해보고자 합니다.
물론, 다른 방법이 더 기본이다 하시는 분들도 있을 수 있으나
이 부분은 주관적인 거라 생각하고 패스할께요.
1. GET 통신하기
처음으로는 통신의 제일 기본이라고 할 수 있는
get 방식으로 통신하는 것을
정리해보고자 합니다.
저는 소스를 아래와 같이
작성하였습니다.
import requests
datas = {
'key' : 'value1'
, 'key2' : 'value2'
}
url = "사이트주소"
response = requests.get(url, farams=datas)
위 소스를 설명해보도록 하겠습니다.
우선, requests를 import 합니다.
그래야 사용할 수 있습니다.
그리고 datas에 데이터를 넘길 파라미터들을 설정해줍니다.
그리고 url 부분에는 API 통신을 할
URL 주소를 입력해 주었습니다.
그리고 get함수를 이용하여
get 방식으로 통신을 하는 것입니다.
그리고 이 때는 farams에 셋팅한 파라미터 데이터를 넘겨주면 됩니다
위와 같이 소스를 작성하였습니다.
사이트주소는 테스트용이다 보니
별도로 전송할 수 있는 주소가 없었습니다.
그래서 그냥 저렇게 적어놓기는 했습니다.
어쨌든 저런 식으로 하면
get 방식을 통한 API 통신을 할 수 있습니다.
하지만, get 방식은 저는 비추천을 합니다.
get은 주소 뒤에 바로 파라미터들이 붙어서 바로 노출이 되는 것도 있고,
길이 제한도 있기 때문입니다.
물론, post 방식도 보안에 좋다고 할 수는 없지만,
그래도 get방식보다는 조금이라도 낫다고 할 수 있다는 느낌??
이 보안적 이슈 보다도 길이가 길면 짤릴 수 있기 때문에
post를 저는 더 개인적으로 추천하고 있습니다.
2. POST 통신하기
이번에는 POST 통신하는 방법을
정리해보도록 하겠습니다.
위 1번에서 정리한 get 방식으로 통신하는 것과
크게 차이가 없습니다.
API 통신을 할 때 호출하는 함수와
넘기는 파라미터명만 조금 다르다고 생각해주시면 되십니다.
소스는 아래와 같습니다.
import requests
datas = {
'key' : 'value1'
, 'key2' : 'value2'
}
url = "사이트주소"
response = requests.post(url, data=datas)
위 1번에서 작성한 get 방식으로 통신하는 것과
거의 차이가 없습니다.
requests 할 때,
post로 넘기는 것과 파라미터 데이터를 data로 넘기는 것만
차이가 있다고 봐주시면 되실 것 같습니다.
위처럼 해주시면 post 방식으로
API 통신을 할 수 있습니다.
3. 헤더, 쿠키 추가하기
통신을 할 때,
헤더값이나 쿠키값 등을 설정해서 같이 넘겨야 하는 경우가 있습니다.
이번에는 이럴 때, 헤더와 쿠키를 셋팅해서
넘겨주시면 되십니다.
이번에는 헤더와 쿠키값을
셋팅하는 방법을 정리해보도록 하겠습니다.
저는 아래와 같이 소스를 작성해 보았습니다.
import requests
datas = {
'key' : 'value1'
, 'key2' : 'value2'
}
url = "사이트주소"
headers = {'Content-Type':'application/json; charset=utf-8'}
cookies = {'ck_test': 'cookies_test'}
response = requests.post(url, data=datas, headers=headers, cookies=cookies)
위 소스에 보시면 headers와 cookies 라고 먼저 설정을 하였습니다.
그리고 post로 API 통신을 할 때
추가로 셋팅하여 넘겨주고 있습니다.
이렇게 셋팅을 해서 넘겨주면
헤더와 쿠키를 설정하여 넘겨줄 수 있습니다.
위처럼 소스를 작성하여서
API 통신을 하시면 되십니다.
그러면 헤더와 쿠키값도 전달이 가능합니다.
4. json 데이터 전송하기
이번에는 json 형식의 데이터를
파라미터로 넘기는 방법을
정리해보고자 합니다.
이번에 이렇게 넘겨야 할 게 있었는데
인터넷을 아무리 찾고 해도 안나오더라고요.
그래서 그냥 한번 해볼까 하고 해봤는데
되더라고요.
그래서 이번에는 이 방법을 정리해보도록 하겠습니다.
위 소스에 보시면 데이터를 넘길 때,
data 로 해서 넘기고 있습니다.
이 부분을 json으로 변경을 해주시면 되십니다.
import requests
datas = [{
"keys" : {
"key1" : 'key_value1'
}
, "values" : {
"value1" : 'values1'
}
}]
url = "사이트주소"
headers = {'Content-Type':'application/json; charset=utf-8'}
cookies = {'ck_test': 'cookies_test'}
response = requests.post(url, json=datas, headers=headers, cookies=cookies)
위처럼 소스를 작성해주시면 되십니다.
위 소스를 보시면
datas가 json object 형식입니다.
그렇다보니 이 데이터를 바로 data로 넘기게 되면
뭔가 잘 안되는거 같더라고요.
그래서 data를 json으로 변경하여 넘겨주었습니다.
그러니깐 문제 없이 성공이 되었었습니다.
위처럼 소스를 작성하여
json 형식 데이터를 넘기는 데 성공하였습니다.
5. SSL 인증 필요시
요즘은 보안이 큰 이슈입니다.
그렇다보니 보통 API 통신을 할 때도
http는 거의 사용을 안하고
https를 사용하고 있습니다.
하지만 이럴 때, 그냥 API 통신을 하면 문제가 없을 수도 있으나,
SSL 때문에 오류가 발생할 수 있습니다.
이럴 때 조치할 수 있는 방법입니다.
verify 값을 설정해 주면 됩니다.
import requests
datas = {
'key' : 'value1'
, 'key2' : 'value2'
}
url = "사이트주소"
headers = {'Content-Type':'application/json; charset=utf-8'}
cookies = {'ck_test': 'cookies_test'}
response = requests.post(url, data=datas, verify=False)
위와 같이 소스를 작성하였습니다.
위에 보면 post로 데이터를 전송할 때,
verify 값을 False로 설정해주었습니다.
그러면 SSL 인증서를 별도로 체크하지 않는 것으로 알고잇습니다.
별도로 설정을 해주지 않으면
기본값은 True로 설정이 되어 있습니다.
위처럼 소스를 작성하여 주시면 되십니다.
그러면 문제 없이 SSL 오류 없이 통신을 하실 수 있으실 것입니다.
6. TimeOut 설정하기
이번에는 TimeOut 설정하는 방법을
정리해보도록 하겠습니다.
API 통신을 할 때,
특정 시간동안 응답에 대한 결과가 없으면
exception 을 발생시키는 것입니다.
import requests
datas = {
'key' : 'value1'
, 'key2' : 'value2'
}
url = "사이트주소"
response = requests.post(url, data=datas, timeout=2) #2초 지나면 exception 발생
위와 같이 소스를 작성하여 주시면 되십니다.
위에 소스에 보면 post 로 통신을 할 때,
timeout값을 설정해 주었습니다.
그러면 해당 초가 지나게 되면
exception 이 발생하게 되는 것입니다.
위 소스에서 보면 timeout 값이 2이기 때문에
2초가 지나게 되면 exception 에러가 발생하게 됩니다.
7. 응답값 받아 처리하기
이번에는 데이터 전송 후 응답결과를 받아서
처리하는 방법을 정리해보도록 하겠습니다.
전송만 하면 끝나는것이 아닌,
보통 전송 성공, 실패유무라도 알아야 하기 때문에
응답값을 받아서 처리하는 것은 거의 필수라고 할 수 있습니다.
그래서 응답값을 받아서 처리할 때
제일 많이 사용되는 것들을
정리해보았습니다.
response.request #전송한 request 객체에 접근
response.status_code #응답 결과 코드
response.raise_for_status() #200 OK 코드가 아닌 경우 에러 발동
response.json() #json response일 경우 딕셔너리 타입으로 바로 변환
저는 위의 4개를 제일 많이 사용하고 있습니다.
이제 위 명령어들 중 일부를 사용하여
실제로 응답을 받아
그 값을 출력하는 것을
확인해보도록 하겠습니다.
import requests
datas = {
'key' : 'value1'
, 'key2' : 'value2'
}
url = "사이트주소"
response = requests.post(url, data=datas, timeout=2) #3초 지나면 exception 발생
if response.status_code == 200 :
print(json.loads(response.text))
저는 소스를 위와 같이 작성하였습니다.
response.status_code 값을 받아서
성공, 실패유무를 체크하도록 하였습니다.
200이면 성공을 한 것이기 때문에
그 때만 회신해주는 값을
출력해주도록 해 놓은 것입니다.
원래는 if문 안에
제가 직접 운영하는 다른 소스들이 더 있습니다.
하지만, 그것을 오픈할 수는 없기 때문에
그냥 화면 출력하도록만 해보았습니다.
위와 같이 소스를 작성하여
실행을 해주면 되는 것입니다.
오늘은 파이썬에서 requests를 이용하여
API 통신하는 방법들을 정리해 보았습니다.
python에서는 API 통신을 할 때,
requests 를 이용하는 방법도 있고,
다른 방법도 있지만 저는 우선 requests 를 이용한 방법을
정리해보았습니다.
그리고 그 중에서도 Get 방식, Post 방식으로 API 통신할 때,
방법을 정리해보았습니다.
저도 이번에 이런 부분을 개발할 일이 있으면서
공부를 하면서 개발을 하였네요.
앞으로도 개발할 일이 있으면
참고를 하면 좋을 것 같네요.
이상으로 파이썬에서 requests 를 이용하여
Get 방식, Post 방식으로 API 통신하는 방법이였습니다~
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'컴퓨터관련 > Python' 카테고리의 다른 글
python에서 AWS S3에 파일 올리기 (2) | 2021.01.12 |
---|---|
python에서의 bytes형(바이트형) (2) | 2020.12.08 |
python BeautifulSoup 이용 웹 크롤링 2탄 태그와 클래스로 데이터 가져오기 (0) | 2020.11.17 |
Python에서 BeautifulSoup 이용 웹크롤링하기 1탄 제목 가져오기 (0) | 2020.11.11 |
python에서 인자값 입력받기 (0) | 2020.10.22 |