Python에서 HTTP 요청을 보내는 가장 많이 사용되고 있는 방법은 requests 라이브러리를 사용하는 것입니다. 이 라이브러리는 사용하기 쉽고 강력한 기능을 제공하여 웹 API와의 상호작용, 웹 스크래핑, 데이터 다운로드 등 다양한 작업에 활용할 수 있습니다.
1. requests 라이브러리 설치하기
먼저 requests 라이브러리를 설치해야 합니다. 터미널이나 명령 프롬프트에서 다음 명령을 실행하세요.
pip install requests
2. 기본 HTTP 요청 예제
GET 요청 보내기
GET 요청은 서버로부터 데이터를 가져올 때 사용합니다.
import requests
# 기본 GET 요청
response = requests.get('https://api.github.com')
# 상태 코드 확인
print(f"상태 코드: {response.status_code}")
# 응답 내용 출력
print(response.text)
# JSON 응답 파싱
json_response = response.json()
print(json_response)
쿼리 파라미터 전송하기
import requests
# 쿼리 파라미터 전송
params = {
'q': 'python',
'sort': 'stars',
'order': 'desc'
}
response = requests.get('https://api.github.com/search/repositories', params=params)
print(response.url) # 실제 요청 URL 확인
print(response.json())
POST 요청 보내기
POST 요청은 서버에 데이터를 전송할 때 사용합니다.
import requests
# POST 요청 - JSON 데이터 전송
data = {
'username': 'user123',
'password': 'pass123'
}
response = requests.post('https://httpbin.org/post', json=data)
print(response.json())
# POST 요청 - 폼 데이터 전송
form_data = {
'username': 'user123',
'password': 'pass123'
}
response = requests.post('https://httpbin.org/post', data=form_data)
print(response.json())
3. 헤더 추가하기
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}
response = requests.get('https://api.github.com/user', headers=headers)
print(response.json())
4. 파일 업로드하기
import requests
# 파일 업로드
files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
5. 쿠키 처리하기
import requests
# 쿠키 받기
response = requests.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
print(response.cookies['sessioncookie'])
# 쿠키 보내기
cookies = {'session_id': '12345'}
response = requests.get('https://httpbin.org/cookies', cookies=cookies)
print(response.json())
6. 세션 사용하기
import requests
# 세션 생성
session = requests.Session()
# 로그인
session.post('https://httpbin.org/post', data={'username': 'user', 'password': 'pass'})
# 로그인 상태로 다른 페이지 요청
response = session.get('https://httpbin.org/get')
print(response.json())
7. 타임아웃 설정하기
import requests
try:
# 5초 타임아웃 설정
response = requests.get('https://httpbin.org/delay/10', timeout=5)
print(response.json())
except requests.exceptions.Timeout:
print("요청 시간이 초과되었습니다.")
8. 에러 처리하기
import requests
try:
response = requests.get('https://httpbin.org/status/404')
response.raise_for_status() # 4XX, 5XX 에러 시 예외 발생
except requests.exceptions.HTTPError as err:
print(f"HTTP 에러 발생: {err}")
except requests.exceptions.ConnectionError:
print("서버에 연결할 수 없습니다.")
except requests.exceptions.Timeout:
print("요청 시간이 초과되었습니다.")
except requests.exceptions.RequestException as err:
print(f"에러 발생: {err}")
9. 비동기 요청 (aiohttp 사용)
많은 요청을 동시에 처리해야 할 경우, aiohttp 라이브러리를 사용할 수 있습니다.
import aiohttp
import asyncio
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def main():
urls = [
'https://httpbin.org/get',
'https://httpbin.org/ip',
'https://httpbin.org/user-agent'
]
tasks = [fetch(url) for url in urls]
results = await asyncio.gather(*tasks)
for result in results:
print(result)
# Python 3.7+
asyncio.run(main())
위 코드를 실행하기 전에 aiohttp를 설치해야 합니다pip install aiohttp
10. 실전 예제: 웹 API 사용하기
import requests
def get_github_user(username):
"""GitHub API[예시]를 사용하여 사용자 정보를 가져옵니다."""
url = f"https://api.github.com/users/{username}"
response = requests.get(url)
if response.status_code == 200:
user_data = response.json()
return {
'name': user_data.get('name'),
'location': user_data.get('location'),
'public_repos': user_data.get('public_repos'),
'followers': user_data.get('followers')
}
else:
print(f"에러: {response.status_code}")
return None
# 사용 예
user_info = get_github_user('octocat')
if user_info:
print(f"이름: {user_info['name']}")
print(f"위치: {user_info['location']}")
print(f"공개 저장소 수: {user_info['public_repos']}")
print(f"팔로워 수: {user_info['followers']}")
[여기에 HTTP 요청 개념 설명 이미지가 들어가면 좋을 것 같습니다]
요약
Python의 requests 라이브러리는 HTTP 요청을 쉽게 보낼 수 있는 강력한 도구입니다. 이 라이브러리를 사용하면 다양한 웹 API와 상호작용하고, 웹 스크래핑을 수행하며, 다양한 HTTP 작업을 처리할 수 있습니다.
기억해야 할 주요 사항:
- GET, POST, PUT, DELETE 등 다양한 HTTP 메서드 지원
- 헤더, 쿠키, 인증 정보 등 쉽게 추가 가능
- JSON, 폼 데이터, 파일 등 다양한 형식의 데이터 전송 가능
- 세션 관리로 여러 요청 간 상태 유지 가능
- 타임아웃 설정과 예외 처리로 안정적인 코드 작성 가능
이러한 기능을 활용하여 웹 API 클라이언트, 데이터 수집 도구, 자동화 스크립트 등 다양한 응용 프로그램을 개발할 수 있습니다.
답글 남기기