requests vs aiohttp - HTTP 요청의 모든 것

2025. 1. 11. 10:35·파이썬/크롤링
반응형

소개

Python에서 HTTP 요청을 처리할 때 가장 많이 사용되는 두 라이브러리인 requests와 aiohttp의 매개변수와 사용법을 자세히 비교해보겠습니다.

설치 방법

# requests 설치
pip install requests

# aiohttp 설치
pip install aiohttp

requests 라이브러리의 주요 매개변수

GET 요청

import requests

response = requests.get(
    url="https://api.example.com/data",
    params={'key': 'value'},              # URL 쿼리 파라미터
    headers={'Authorization': 'Bearer token'},  # 요청 헤더
    cookies={'session': 'abc123'},        # 쿠키
    timeout=5,                            # 요청 타임아웃 (초)
    verify=True,                          # SSL 인증서 검증
    proxies={                             # 프록시 설정
        'http': 'http://proxy.example.com:8080',
        'https': 'http://proxy.example.com:8080'
    },
    allow_redirects=True,                 # 리다이렉트 허용
)

POST 요청

response = requests.post(
    url="https://api.example.com/data",
    json={'key': 'value'},               # JSON 형식 데이터
    data={'key': 'value'},               # Form 데이터
    files={                              # 파일 업로드
        'file': open('example.txt', 'rb')
    },
    auth=('username', 'password'),       # 기본 인증
    cert=('cert.pem', 'key.pem'),       # 클라이언트 인증서
)

requests 매개변수 상세 설명

매개변수 설명 예시
params URL 쿼리 파라미터 params={'q': 'search', 'page': 1}
json JSON 형식 요청 본문 json={'name': 'John', 'age': 30}
data Form 데이터 data={'username': 'john'}
headers HTTP 헤더 headers={'User-Agent': 'Mozilla/5.0'}
verify SSL 인증서 검증 verify=False # 보안주의
proxies 프록시 서버 설정 proxies={'http': 'http://proxy:8080'}

aiohttp 라이브러리 사용법

기본 사용법

import aiohttp
import asyncio

async def fetch_data():
    async with aiohttp.ClientSession() as session:
        async with session.get('https://api.example.com/data') as response:
            return await response.json()

# 실행
asyncio.run(fetch_data())

상세 매개변수 사용

async def advanced_fetch():
    async with aiohttp.ClientSession() as session:
        async with session.post(
            url='https://api.example.com/data',
            json={'key': 'value'},              # JSON 데이터
            params={'query': 'search'},         # 쿼리 파라미터
            headers={'Authorization': 'Bearer token'},
            proxy='http://proxy.example.com:8080',  # 프록시 (단일)
            ssl=False,                          # SSL 검증 비활성화
            timeout=aiohttp.ClientTimeout(total=30),  # 타임아웃
        ) as response:
            return await response.json()

requests와 aiohttp의 주요 차이점

1. 세션 관리

# requests - 자동 세션 관리
requests.get('https://api.example.com')

# aiohttp - 명시적 세션 관리
async with aiohttp.ClientSession() as session:
    async with session.get('https://api.example.com') as response:
        data = await response.json()

2. 프록시 설정

# requests - 딕셔너리로 프로토콜별 설정
requests.get('https://api.example.com', proxies={
    'http': 'http://proxy:8080',
    'https': 'http://proxy:8080'
})

# aiohttp - 단일 프록시 문자열
await session.get('https://api.example.com', proxy='http://proxy:8080')

3. 타임아웃 설정

# requests - 숫자 값으로 간단 설정
requests.get('https://api.example.com', timeout=5)

# aiohttp - 상세 타임아웃 설정
timeout = aiohttp.ClientTimeout(
    total=300,        # 전체 작업 시간
    connect=60,       # 연결 수립 시간
    sock_read=60,     # 소켓 읽기 시간
    sock_connect=60   # 소켓 연결 시간
)
await session.get('https://api.example.com', timeout=timeout)

비동기 요청 처리 예제

다중 요청 처리

async def fetch_all():
    async with aiohttp.ClientSession() as session:
        tasks = []
        urls = [
            'https://api.example.com/1',
            'https://api.example.com/2',
            'https://api.example.com/3'
        ]

        for url in urls:
            tasks.append(session.get(url))

        responses = await asyncio.gather(*tasks)
        return [await r.json() for r in responses]

에러 처리

async def safe_fetch(url):
    try:
        async with aiohttp.ClientSession() as session:
            async with session.get(url) as response:
                if response.status == 200:
                    return await response.json()
                return None
    except aiohttp.ClientError as e:
        print(f"Error fetching {url}: {e}")
        return None

성능 비교

# requests - 동기 처리
def sync_requests():
    urls = ['https://api.example.com/1', 'https://api.example.com/2']
    return [requests.get(url).json() for url in urls]

# aiohttp - 비동기 처리
async def async_requests():
    urls = ['https://api.example.com/1', 'https://api.example.com/2']
    async with aiohttp.ClientSession() as session:
        tasks = [session.get(url) for url in urls]
        responses = await asyncio.gather(*tasks)
        return [await r.json() for r in responses]

마치며

requests와 aiohttp는 각각의 장단점이 있습니다. 단순한 HTTP 요청에는 requests가 더 직관적이고, 다중 요청이나 고성능이 필요한 경우에는 aiohttp가 더 적합합니다.

저작자표시 비영리 변경금지 (새창열림)

'파이썬 > 크롤링' 카테고리의 다른 글

펫프렌즈 리뷰 크롤링  (0) 2025.05.08
VPN과 프록시 서버  (0) 2024.11.30
Requests : HTTP 요청 최적화  (0) 2024.02.06
크롤링이 가능한 사이트인지 확인하는 방법  (1) 2024.02.04
크롤링을 할 때 셀레니움이 필요한지 확인하는 방법  (0) 2024.02.03
'파이썬/크롤링' 카테고리의 다른 글
  • 펫프렌즈 리뷰 크롤링
  • VPN과 프록시 서버
  • Requests : HTTP 요청 최적화
  • 크롤링이 가능한 사이트인지 확인하는 방법
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    codingcommunity
    C#
    devlife
    긴유통기한우유
    상품 리뷰 크롤링
    리스트
    카페24리뷰이관
    unity
    Python
    카페24리뷰
    쇼핑몰리뷰
    리뷰이관
    유니티
    믈레코비타멸균우유
    라떼우유
    셀레니움
    스크립트 실행
    learntocode
    리뷰관리
    파이썬
    programming101
    codingtips
    ipcamera
    appdevelopment
    rtsp
    cv2
    스마트스토어리뷰
    programmerlife
    스크립트 실행 순서
    list
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
requests vs aiohttp - HTTP 요청의 모든 것
상단으로

티스토리툴바