안녕하세요! 오늘은 파이썬의 requests 모듈에 대한 내용을 다뤄보려 합니다. requests 모듈은 HTTP 요청을 보내고 웹 데이터를 가져오는 데 유용한 도구입니다. 이를 통해 웹 스크래핑, API 요청, 웹 서비스 테스트 등 다양한 웹 기반 작업을 수행할 수 있습니다. 함께 살펴볼 내용은 requests 모듈의 기본 사용법, 고급 기능, 보안 및 예외 처리 등 다양한 주제입니다. 그럼 시작해보겠습니다.
1. requests 모듈이란?
requests 모듈은 파이썬에서 HTTP 요청을 보내고 웹 서버로부터 데이터를 가져오는 기능을 제공하는 라이브러리입니다. 이 모듈을 사용하면 웹 페이지의 내용을 가져오거나, API로부터 데이터를 요청하고 응답을 처리하는 등 다양한 웹 기반 작업을 쉽게 수행할 수 있습니다. requests 모듈은 간편하고 직관적인 API를 제공하여 웹 요청 및 응답 처리를 단순화하고, HTTP 헤더, 쿠키, 세션 관리, 파일 업로드 등 다양한 기능을 지원합니다. 이로써 파이썬 프로그래머는 웹과 상호작용하는 데 용이한 도구를 사용할 수 있습니다.
모듈의 특징
- 간편한 HTTP 요청 처리
requests 모듈은 HTTP GET, POST, PUT, DELETE 등의 다양한 메서드로 간편하게 HTTP 요청을 보낼 수 있습니다. - 직관적인 API
requests 모듈은 직관적이고 사용하기 쉬운 API를 제공하여 사용자가 HTTP 요청 및 응답 처리를 쉽게 할 수 있도록 합니다. - 다양한 인증 방식 지원
requests는 HTTP Basic 인증, OAuth 등 다양한 인증 방식을 지원하여 보안 요구사항을 충족합니다. - 세션 관리
requests.Session 클래스를 사용하여 세션을 유지하고, 쿠키를 자동으로 관리할 수 있습니다. - HTTP 헤더 커스터마이징
요청 및 응답 헤더를 쉽게 설정하고 읽을 수 있으며, 사용자 지정 헤더를 쉽게 추가할 수 있습니다. - 쿠키 처리
쿠키를 쉽게 다룰 수 있으며, 쿠키를 저장하고 가져올 수 있습니다. - 파일 업로드
파일을 업로드하고 다운로드하는 기능을 지원합니다. - 리다이렉션 관리
리다이렉션을 자동으로 처리하거나 수동으로 제어할 수 있습니다. - 연결 풀링
requests 모듈은 HTTP 연결을 효율적으로 관리하며, 연결 풀을 사용하여 성능을 향상시킵니다. - 다양한 에러 처리
다양한 HTTP 상태 코드와 네트워크 에러에 대한 예외 처리 기능을 제공하여 안정적인 웹 요청을 보장합니다. - 다양한 데이터 형식 지원
JSON, XML, HTML 등 다양한 데이터 형식을 처리하고 파싱할 수 있습니다. - 모바일 기기와 호환
모바일 애플리케이션과 함께 사용하기에 적합한 기능과 호환성을 제공합니다.
2. requests 모듈의 설치와 사용법
1. requests 모듈 설치하기
requests 모듈은 pip를 사용하여 설치할 수 있습니다. 명령 프롬프트나 터미널에서 다음 명령을 실행합니다.
pip install requests
2. requests 모듈 사용하기
requests 모듈을 사용하여 HTTP 요청을 보내고 응답을 처리하는 기본적인 예제를 살펴보겠습니다.
import requests
# GET 요청 보내기
response = requests.get('https://www.example.com')
# 응답의 상태 코드 확인
if response.status_code == 200:
print('요청이 성공했습니다.')
print('응답 데이터:', response.text)
else:
print('요청이 실패했습니다. 상태 코드:', response.status_code)
위의 코드에서는 requests.get() 함수를 사용하여 GET 요청을 보내고, 응답 데이터를 response.text를 통해 확인합니다. 요청에 대한 응답의 상태 코드를 검사하여 요청이 성공적으로 처리되었는지 확인할 수 있습니다.
3. 추가 옵션과 헤더 설정
requests 모듈을 사용하여 요청에 추가 옵션을 설정하거나 헤더를 커스터마이징할 수 있습니다. 자세한 내용은 공식 문서를 참조하세요.
위와 같이 requests 모듈을 사용하면 간편하게 HTTP 요청을 보낼 수 있고, 서버로부터 받은 응답을 쉽게 처리할 수 있습니다.
3. HTTP 메서드
HTTP(HTTP Hypertext Transfer Protocol)는 웹 브라우저와 웹 서버 간에 데이터를 주고받기 위한 프로토콜입니다. HTTP는 다양한 메서드(또는 HTTP 동사)를 사용하여 서버에 요청을 보내고, 서버는 이러한 요청에 대한 응답을 반환합니다. 파이썬에서는 requests 모듈을 사용하여 다양한 HTTP 메서드를 지원합니다.
- GET
서버로부터 데이터를 가져올 때 사용하는 메서드입니다. 주로 정보를 요청할 때 사용하며, 요청한 데이터는 URL에 포함됩니다. - POST
서버에 데이터를 제출할 때 사용하는 메서드입니다. 주로 양식(form) 데이터를 전송하거나 리소스를 생성하는 데 사용됩니다. - PUT
서버에 데이터를 업데이트하거나 새로운 리소스를 생성할 때 사용하는 메서드입니다. 전체 엔티티를 교체합니다. - PATCH
서버에 데이터의 일부를 업데이트할 때 사용하는 메서드입니다. 전체 엔티티를 교체하는 PUT과 달리 일부만 수정합니다. - DELETE
서버에서 리소스를 삭제할 때 사용하는 메서드입니다. 해당 리소스를 삭제하는 데 사용됩니다. - HEAD
서버에서 리소스의 헤더 정보만 가져올 때 사용하는 메서드입니다. 데이터의 내용은 가져오지 않습니다. - OPTIONS
서버에서 지원하는 메서드 목록이나 특정 리소스의 사용 가능한 옵션을 확인하기 위한 메서드입니다. - CONNECT
목적지에 대한 네트워크 연결을 설정하기 위해 사용하는 메서드로, 주로 프록시 서버와의 터널링에 사용됩니다. - TRACE
서버에 의해 수행된 작업을 추적하기 위해 사용하는 메서드로, 주로 디버깅 용도로 활용됩니다.
HTTP 메서드는 요청의 목적과 의미에 따라 적절한 메서드를 선택하여 사용해야 합니다. 이러한 메서드는 웹 애플리케이션 개발 및 API 요청에 중요한 역할을 합니다.
4. 요청 헤더와 데이터
requests 모듈을 사용하여 HTTP 요청을 보낼 때, 요청 헤더와 데이터를 설정할 수 있습니다. 요청 헤더는 요청에 대한 부가 정보를 포함하고, 요청 데이터는 POST 또는 PUT과 같은 메서드를 사용할 때 서버로 전송하는 데이터를 나타냅니다.
1. 요청 헤더 설정
requests 모듈을 사용하여 요청 헤더를 설정할 때는 headers 매개변수를 활용합니다. 요청 헤더는 딕셔너리 형태로 전달됩니다.
import requests
headers = {
'User-Agent': 'MyApp/1.0', # 사용자 에이전트 설정
'Authorization': 'Bearer <access_token>', # 인증 토큰 설정
'Accept': 'application/json' # 응답 데이터 형식 설정
}
response = requests.get('https://example.com/api', headers=headers)
2. 요청 데이터 설정
HTTP POST 또는 PUT 요청과 함께 데이터를 전송해야 할 경우, data 또는 json 매개변수를 사용하여 요청 데이터를 설정할 수 있습니다.
import requests
# 데이터를 딕셔너리로 설정 (application/x-www-form-urlencoded 형식)
data = {
'key1': 'value1',
'key2': 'value2'
}
response = requests.post('https://example.com/api', data=data)
# JSON 데이터를 전송하는 경우
import json
data = {
'key1': 'value1',
'key2': 'value2'
}
response = requests.post('https://example.com/api', json=data)
data는 application/x-www-form-urlencoded 형식으로 데이터를 보내는 데 사용되고, json은 JSON 형식의 데이터를 보내는 데 사용됩니다.
요청 헤더와 데이터 설정을 통해 requests 모듈을 활용하여 다양한 HTTP 요청을 보낼 수 있으며, 이를 통해 원격 서버와의 통신을 다룰 수 있습니다.
5. requests 모듈의 활용 예제
requests 모듈은 다양한 웹 요청과 응답을 처리하는 기능을 제공하므로, 이를 사용하여 웹 서버와 상호 작용할 수 있는 다양한 활용 예제가 있습니다.
1. GET 요청 보내기
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text) # 웹 페이지 내용 출력
위의 코드는 주어진 URL에서 GET 요청을 보내고, 응답 내용을 출력합니다. 주어진 URL은 JSONPlaceholder API의 예제 엔드포인트를 사용하였습니다.
2. POST 요청 보내기
import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.text)
위의 코드는 주어진 URL로 POST 요청을 보내고, 데이터를 서버로 전송합니다. 응답은 서버에서 받은 데이터를 출력합니다.
3. JSON 데이터 전송하기
import requests
import json
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', json=data)
print(response.text)
위의 코드는 JSON 형식의 데이터를 서버로 POST 요청을 통해 전송합니다.
4. 헤더 설정하기
import requests
headers = {'User-Agent': 'MyApp/1.0'}
response = requests.get('https://jsonplaceholder.typicode.com/posts/1', headers=headers)
print(response.text)
위의 코드는 사용자 에이전트 헤더를 설정하여 GET 요청을 보냅니다.
5. 파일 업로드
import requests
files = {'file': ('example.txt', open('example.txt', 'rb'))}
response = requests.post('https://httpbin.org/post', files=files)
print(response.text)
위의 코드는 파일을 서버에 업로드하는 POST 요청을 보냅니다.
6. 세션 유지하기
import requests
# 세션 시작
session = requests.Session()
session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
# 동일한 세션으로 요청
response = session.get('https://httpbin.org/cookies')
print(response.text)
위의 코드는 세션을 유지하여 여러 요청 간에 쿠키 정보를 공유합니다.
requests 모듈은 다양한 웹 요청과 응답 처리를 지원하므로, 웹 스크래핑, API 호출, 웹 서비스와 상호 작용 등 다양한 웹 기반 프로젝트에서 활용할 수 있습니다.
6. requests 모듈 사용시 주의사항
1. 예외 처리 (Exception Handling)
웹 요청 시 네트워크 문제나 서버 오류 등 예외 상황을 처리해야 합니다. try/except 블록을 사용하여 예외를 처리하는 것이 좋습니다.
import requests
try:
response = requests.get('https://example.com')
response.raise_for_status() # 응답이 200 OK가 아닌 경우 예외 발생
except requests.exceptions.RequestException as e:
print(f'요청 오류: {e}')
2. 인코딩 처리
웹 서버가 다른 문자 인코딩을 사용하는 경우, 응답 데이터의 인코딩을 올바르게 처리해야 합니다. response.encoding 속성을 확인하고 필요한 경우 수동으로 설정합니다.
import requests
response = requests.get('https://example.com')
response.encoding = 'utf-8' # 인코딩을 웹 사이트에 맞게 설정
3. 보안
requests 모듈을 사용하여 데이터를 전송할 때 민감한 정보(비밀번호, 토큰 등)를 함께 보내지 않도록 주의해야 합니다. 데이터를 안전하게 전송하기 위해 HTTPS를 사용하고, 민감한 정보는 안전하게 저장하고 관리해야 합니다.
4. HTTP 메서드
요청을 보낼 때 적절한 HTTP 메서드(GET, POST, PUT, DELETE 등)를 선택해야 합니다. 서버에 부적절한 메서드로 요청을 보내는 것은 보안 문제를 야기할 수 있습니다.
5. 사용자 에이전트 (User-Agent)
일부 웹 사이트는 사용자 에이전트 헤더를 검사하여 웹 스크레이퍼를 차단할 수 있습니다. 필요한 경우 사용자 에이전트를 설정하여 웹 사이트에 봇으로 인식되지 않도록 합니다.
import requests
headers = {'User-Agent': 'MyApp/1.0'}
response = requests.get('https://example.com', headers=headers)
6. API 키 및 인증
API를 사용하는 경우, API 키 또는 인증 토큰을 안전하게 관리하고 노출되지 않도록 주의합니다.
7. 블록되지 않게 하기
웹 스크래핑 봇이 웹 사이트에서 차단되는 것을 피하기 위해 로봇 배제 표준(robots.txt)을 준수하고, 요청 속도를 적절하게 조절합니다.
import requests
from time import sleep
url = 'https://example.com/data'
headers = {'User-Agent': 'MyBot/1.0'}
# 로봇 배제 표준 확인
response = requests.get(url, headers=headers)
if response.status_code == 200 and 'User-agent: *' in response.text:
print('로봇 배제 표준을 준수하세요.')
# 요청 간격 설정
for i in range(10):
response = requests.get(url, headers=headers)
# ...
sleep(1) # 1초 간격으로 요청
8. 정규화된 URL 사용
URL을 구성할 때 정규화된 URL을 사용하여 중복 및 오류를 방지해야 합니다.
최종 정리
오늘은 파이썬 requests 모듈을 사용하여 HTTP 요청을 보내고 응답을 처리하는 방법에 대해 알아보았습니다. 이를 통해 웹 사이트에서 데이터를 가져오고 API와 상호작용하는 기초적인 방법을 정리하였습니다. requests 모듈은 웹 스크래핑, 데이터 수집, 웹 서비스와의 통신 등 다양한 웹 개발 작업에 유용하게 활용됩니다.
감사합니다.
'Python > python' 카테고리의 다른 글
파이썬 subprocess.run() 함수로 외부 명령어 실행하기 (0) | 2023.11.01 |
---|---|
파이썬 subprocess 모듈을 이용해서 외부 프로그램 실행하기 (1) | 2023.10.31 |
파이썬 time.sleep() 함수를 활용해서 시간 지연하기 (0) | 2023.10.29 |
파이썬의 예외 처리 try-except 구문 이해하기 (1) | 2023.10.28 |
파이썬 asyncio 모듈을 활용하여 비동기 프로그래밍 처리하기 (1) | 2023.10.27 |