개요
requests는 Python에서 HTTP 통신을 처리하기 위한 라이브러리이다. urllib3을 기반으로 구축되어 있으며 urllib2의 모든 기능을 계승한다. 가장 큰 장점은 별도의 스레드 풀 관리 없이도 쉽게 사용할 수 있다는 점이다. 복잡한 설정 과정 없이 직관적인 API를 제공하므로 HTTP 테스트 및 웹 스크래핑 작업에 적합하다.
설치는 다음 명령어로 수행한다:
pip install requests
임포트 방법은 다음과 같다:
import requests
주요 사용법
GET 요청
서버에서 데이터를 가져올 때 사용한다. 가장 기본적인 요청 방식이다.
import requests
response = requests.get(url="http://www.example.com")
print(response.status_code)
POST 요청
서버로 데이터를 전송할 때 사용한다. GET 요청과 달리 요청 본문에 데이터를 포함하여 전송한다.
import requests
keyword = input("검색어를 입력하세요: ")
api_url = "https://example.com/api/search"
playload = {
"search": keyword,
}
request_headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
}
response = requests.post(url=api_url, data=playload, headers=request_headers)
print(response.json())
참고:
data파라미터는 URL에 포함되지 않고 요청 본문으로 전송된다data와json파라미터는 유사한 역할을 하나 전송 방식이 다르다- GET 요청에 사용 가능한 대부분의 파라미터는 POST 요청에도 적용 가능하다
HEAD 요청
응답 헤더 정보만 가져올 때 사용한다. 전체 본문을 다운로드하지 않고 헤더 정보를 확인하고 싶을 때 유용하다.
import requests
target_url = "http://www.example.com"
http_headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
}
response = requests.head(url=target_url)
print(response.headers)
PUT 요청
기존 리소스를 업데이트할 때 사용한다.
POST와 PUT의 차이점:
- POST: 새로운 리소스를 생성할 때 사용
- PUT: 지정된 URI의 기존 리소스를 대체할 때 사용
실전 예제
파일 업로드
requests 라이브러리를 사용하면 파일을 서버로 쉽게 업로드할 수 있다.
import requests
file_dict = {"uploaded_file": open("C:\\Users\\user\\Documents\\sample.txt", "rb")}
result = requests.post("http://httpbin.org/post", files=file_dict)
print(result.status_code)
쿠키 획득
세션 관리나 인증에 필요한 쿠키 정보를 가져오는 방법이다.
방법 1: 직접 접근
import requests
session = requests.get('https://www.example.com/')
http_cookies = session.cookies
print(http_cookies)
방법 2: 함수로 캡슐화
import requests
def extract_cookies():
req = requests.get('https://www.example.com/')
print(req.cookies)
return ''.join('{0}={1};'.format(k, v) for k, v in req.cookies.items())
extract_cookies()
API 데이터 조회
실제 API 엔드포인트에서 데이터를 가져오는 예제이다.
import requests
http_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0'}
session_cookies = requests.post('https://example.com/stock/S/SH000001', headers=http_headers)
session_cookies = session_cookies.cookies
data_response = requests.get(
'https://api.example.com/v5/stock/quote.json?symbol=SH000001&extend=detail',
timeout=5,
cookies=session_cookies,
headers=http_headers
)
print(data_response.json())