GET, POST 요청을 해보자! Requests

2019. 3. 9. 18:41Python/modules


(로고가 필요이상으로 있어 보인다)


GET, POST 요청을 해보자! Requests


Python으로 GET, POST등의 요청을 할 때 뭐가 필요할 까? 기존 Python에 있는 urllib, request를 사용 해도 무방은 하겠지만 다양한 기능을 기원하지 않는다. 할 수는 있으나 손이 많이 갈 것이다. 좀 더 깔끔하게 웹 서버와 요청을 주고 받을 수 있는 모듈이 없을까? 그렇다면 답은 Requests 이다. 이 모듈은 크롤링을 할 때, 백앤드 서버 테스팅을 할 때 자주 함께 사용된다. (API 테스트를 위해서는 Postman 이라는 좋은 프로그램이 있지만, 가끔 테스팅을 자동화 하고 싶을 때 쓴다.)



설치 방법


리눅스 터미널 혹은 윈도우의 명령 프롬포트에서 다음 명령어를 입력한다.


1
$ pip install requests

cs




사용 방법


테스트 서버로는 Flask를 사용 하겠다. Flask가 설치 되어 있지 않으면 pip install flask로 설치하자. 아래는 서버 코드이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from flask import Flask, request, jsonify
 
app = Flask(__name__)
 
@app.route('/', methods=['GET''POST'])
def index():
    if request.method == 'GET':
        return jsonify(request.args) # 쿼리 스트링 반환
    elif request.method == 'POST':
        if request.get_json() != None:
            return jsonify(request.get_json()) # body로 받은 json 그대로 반환
        else:
            return jsonify(request.form) # form으로 받은 값 json 반환
 
if __name__ == "__main__":
    app.run(debug=True)
cs


일단 requests 객체를 반환 받아보자!


requests.get(url)


url에 GET 요청을 보내고, Response 객체를 반환 받는다. params 어트리뷰트에 딕셔너리를 넣어, 쿼리 스트링을 삽입 할 수 있다. Response.text를 통해 반환 내용을 확인 할 수 있다.



어트리뷰트 값으로 다음을 삽입 가능 하다. json과 files를 같이 담을 수 없다.

  • json : json 값을 dict 객체로 받는다.
  • headers : header 값을 dict 객체로 받는다.
  • files : file 값을 File 객체로 받는다.




requests.post(url)


url에 POST 요청을 보내고, Response 객체를 반환 받는다. params 어트리뷰트에 딕셔너리를 넣어, 쿼리 스트링을 삽입 할 수 있다. Response.text를 통해 반환 내용을 확인 할 수 있다.




Response 객체의 속성


Response 객체의 속성은 다음과 같다.

  • text : str 객체로 요청의 결과 값을 반환한다. html 문
  • encoding : encoding 방식을 반환한다.
  • content : binary 형태로 요청의 결과 값을 반환한다.
  • status_code : 요청 결과의 status code를 반환 한다.
  • headers : 요청 결과의 헤더 값을 반환 한다.
  • cookies : 요청 결과의 쿠키 값을 반환 한다.
  • json() : 이는 속성은 아니고, json을 dict 객체로 반환받는 함수이다. html을 반환 받을 때는 작동하지 않는다.





간단한 사용법은 다음과 같다. 다음 시간엔 Requests의 Session을 이용하는 법을 알아보겠다!

'Python > modules' 카테고리의 다른 글

Python Image 라이브러리, Pillow  (0) 2019.03.07