개요
cURL과 같은 웹 요청을 Python으로 처리하는 방법을 적어둔다.
cURL; client URL
윈도우와 리눅스에 기본 설치되고 있는 웹 개발 툴
http, https, ftp, sftps, smtp, telnet 등의 다양한 프로토콜을 이용해 데이터를 전송하기 위한 라이브러리와 명령 줄 도구를 제공한다.
명령어
curl -X <METHOD> "<URL>" -H "<HEADER>" -d '{<DATA_DICT>}'
# -X : --request. 요청 메소드 지정
# -H : --header. HTTP Header에 추가
# -d : --data. HTTP POST data 지정
# 예시
curl -X POST "https://gitlab.example.com/api/v4/projects" -H "Accept-Encoding: gzip" -H "Content-Type: application/json" -d '{"message": "hello"}'
Requests 모듈
여러 프로토콜 중 http를 이용한 요청을 다룰 때 사용한다.
공식 문서 : https://docs.python-requests.org/en/latest/
설치
기본 내장 모듈이 아니기 때문에 설치가 필요하다.
pip install requests
사용
- 요청 방법
import requests
r = requests.get(url)
r = requests.post(url)
r = requests.delete(url, data={"key":"value"})
r = requests.head(url)
r = requests.options(url)
- 매개변수(parameter) 전달
딕셔너리 형태의 문자열을 선언하여, params 값으로 지정하여 요청한다.
import requests
params = "{'key1': 'value1', 'key2': 'value2'}"
r = requests.get(url, params=params)
- data 전달
매개변수 전달하듯이 전달한다.
만약 요청 구조가 복잡한 경우, 딕셔너리 구조를 문자열로 변환하는 json 모듈을 이용하는 것이 좋다.
import requests
import json
data = {'outer': {'inner': 'value'}}
r = requests.post(URL, data=json.dumps(data))
이 외 header, cookies도 동일한 방식으로 전달한다.
- 응답 데이터(Response Content)
속성 | 설명 |
status_code | 응답 상태 |
headers | headers 정보 |
cookies | cookies 정보 |
encoding | 데이터 인코딩 |
text | 문자열 형의 데이터 |
content | bytes 형의 데이터 |
json() | dict 타입의 데이터 |
예시) 문자열 데이터 사용
import requests
import json
data = {'outer': {'inner': 'value'}}
r = requests.post(URL, data=json.dumps(data))
txt = r.text
참고 ) curl converter
cURL 명령어를 입력하면 Java, Python 등의 언어에서 사용할 수 있는 형태 또는 Json 형식으로 변환해주는 사이트이다.