0Pricing
AI Agents · 강의

에이전트용 HTTP 클라이언트: httpx와 requests

동기 및 비동기 HTTP 요청, 세션 관리, 헤더를 다룹니다.

에이전트용 HTTP 클라이언트: httpx와 requests은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Agents 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.

에이전트에게 HTTP 클라이언트가 중요한 이유

AI 에이전트는 API, 웹사이트, 서비스와 같은 외부 소스에서 데이터를 가져와야 하는 경우가 많습니다. 신뢰할 수 있는 HTTP 클라이언트는 모든 에이전트 도구 모음의 핵심 도구입니다.

Python에는 널리 사용되는 HTTP 라이브러리가 두 가지 있습니다. requests는 동기 방식으로 간단하고, httpx는 동기 및 비동기 방식을 모두 지원합니다. 효율적인 에이전트를 구축하려면 각각을 언제 사용해야 하는지 이해하는 것이 중요합니다.

requests를 사용한 기본 GET 요청

requests 라이브러리를 사용하면 간단한 HTTP 호출을 쉽게 수행할 수 있습니다. requests.get(url)을 사용해 리소스를 가져오고 응답을 확인합니다.

응답 본문을 사용하기 전에 항상 상태 코드를 확인해 조용히 발생하는 실패를 방지합니다.

import requests

url = 'https://api.example.com/data'
response = requests.get(url)

print(response.status_code)  # 200
print(response.text)         # raw string body
print(response.json())       # parsed JSON dict

헤더와 시간 제한 추가하기

대부분의 API에는 인증 헤더가 필요합니다. headers= 매개변수를 사용하면 헤더 사전을 전달할 수 있습니다. 느린 서버 때문에 에이전트가 무기한 멈추는 것을 방지하려면 항상 timeout=을 설정합니다.

import requests

headers = {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Accept': 'application/json'
}

response = requests.get(
    'https://api.example.com/items',
    headers=headers,
    timeout=10  # seconds
)

data = response.json()
print(data)

raise_for_status() — 오류 발생 시 즉시 실패하기

response.raise_for_status()는 4xx 및 5xx 상태 코드에 대해 HTTPError를 발생시킵니다. 이를 사용하지 않으면 404 또는 500 응답이 조용히 성공으로 처리됩니다.

이는 에이전트에서 권장되는 방식입니다. 즉시 오류를 명확하게 알려야 에이전트가 재시도하거나 오류를 보고할 수 있습니다.

import requests

try:
    response = requests.get('https://api.example.com/missing', timeout=10)
    response.raise_for_status()  # raises if status >= 400
    data = response.json()
except requests.HTTPError as e:
    print(f'HTTP error: {e}')
except requests.RequestException as e:
    print(f'Network error: {e}')

httpx 소개

httpx는 requests와 동일한 API를 제공하면서 비동기 지원을 추가한 최신 HTTP 클라이언트입니다. 또한 기본적으로 시간 제한을 적용하므로 프로덕션 에이전트에서 더 안전합니다.

pip install httpx로 설치합니다. 동기 방식의 사용법은 requests와 거의 같습니다.

import httpx

response = httpx.get(
    'https://api.example.com/data',
    headers={'Authorization': 'Bearer YOUR_KEY'},
    timeout=10.0
)

response.raise_for_status()
data = response.json()
print(data)

httpx.AsyncClient를 사용한 비동기 HTTP

에이전트가 비동기 문맥(예: FastAPI 또는 asyncio)에서 실행될 때는 httpx.AsyncClient를 사용해 이벤트 루프가 차단되지 않도록 합니다. 연결이 제대로 닫히도록 async with로 감쌉니다.

import httpx
import asyncio

async def fetch_data(url: str) -> dict:
    async with httpx.AsyncClient(timeout=10.0) as client:
        response = await client.get(
            url,
            headers={'Authorization': 'Bearer YOUR_KEY'}
        )
        response.raise_for_status()
        return response.json()

# result = asyncio.run(fetch_data('https://api.example.com/data'))

여러 비동기 요청을 동시에 보내기

비동기 HTTP의 주요 장점 중 하나는 asyncio.gather()를 사용해 여러 URL에서 한 번에 데이터를 가져올 수 있다는 것입니다. 여러 엔드포인트의 데이터가 있어야 응답할 수 있는 에이전트의 속도를 크게 높일 수 있습니다.

import httpx
import asyncio

async def fetch_all(urls: list) -> list:
    async with httpx.AsyncClient(timeout=10.0) as client:
        tasks = [client.get(url) for url in urls]
        responses = await asyncio.gather(*tasks)
        return [r.json() for r in responses]

urls = [
    'https://api.example.com/item/1',
    'https://api.example.com/item/2',
    'https://api.example.com/item/3'
]
# results = asyncio.run(fetch_all(urls))

세션 재사용과 연결 풀링

모든 요청마다 새로운 HTTP 연결을 만들면 느립니다. 두 라이브러리 모두 연결 풀을 지원합니다. requests.Session과 httpx.Client는 TCP 연결을 재사용하고 여러 요청에서 헤더와 쿠키를 공유합니다.

이는 같은 API에 여러 번 호출하는 에이전트에서 특히 유용합니다.

import httpx

# Create once, reuse for many requests
client = httpx.Client(
    base_url='https://api.example.com',
    headers={'Authorization': 'Bearer YOUR_KEY'},
    timeout=10.0
)

response1 = client.get('/users')
response2 = client.get('/items')
response3 = client.get('/orders')

client.close()  # always close when done

JSON 본문으로 POST 요청 보내기

에이전트는 데이터를 읽기만 하는 것이 아니라 전송해야 하는 경우가 많습니다. json= 매개변수를 사용하면 Python 사전을 자동으로 직렬화하고 올바른 Content-Type 헤더를 설정할 수 있습니다.

import httpx

payload = {
    'query': 'latest AI news',
    'max_results': 5,
    'language': 'en'
}

response = httpx.post(
    'https://api.example.com/search',
    json=payload,
    headers={'Authorization': 'Bearer YOUR_KEY'},
    timeout=15.0
)

response.raise_for_status()
results = response.json()
print(results['items'])

응답 구문 분석하기: text, json, content

응답 객체에는 본문과 관련된 세 가지 주요 속성이 있습니다.

  • .text — 디코딩된 문자열(HTML, XML, 일반 텍스트)
  • .json() — JSON을 Python 사전 또는 목록으로 구문 분석
  • .content — 원시 바이트(이미지 또는 바이너리 파일용)

API의 콘텐츠 유형에 따라 적절한 속성을 사용합니다.

import httpx

response = httpx.get('https://api.example.com/report', timeout=10.0)

# For JSON APIs
data = response.json()            # dict or list

# For HTML or plain text
html = response.text              # str

# For binary files
image_bytes = response.content    # bytes

print(type(data), type(html), type(image_bytes))

종합하기: 에이전트 HTTP 가져오기 도구

다음은 에이전트가 도구로 호출할 수 있는 완전하고 재사용 가능한 가져오기 함수입니다. 오류를 적절히 처리하고, 요청을 기록하며, 구조화된 데이터를 반환합니다.

이 패턴은 모든 웹 데이터 가져오기 에이전트 도구를 구축하는 견고한 기반이 됩니다.

import httpx
import logging

logger = logging.getLogger(__name__)

def agent_fetch(url: str, headers: dict = None) -> dict:
    try:
        response = httpx.get(
            url,
            headers=headers or {},
            timeout=10.0
        )
        response.raise_for_status()
        logger.info(f'Fetched {url} -> {response.status_code}')
        return {'success': True, 'data': response.json()}
    except httpx.HTTPStatusError as e:
        return {'success': False, 'error': str(e)}
    except httpx.RequestError as e:
        return {'success': False, 'error': f'Network error: {e}'}

지식 확인: HTTP 클라이언트

에이전트용 HTTP 클라이언트에 대한 이해도를 테스트해 보세요.

요약: 에이전트용 HTTP 클라이언트

이 단원에서는 에이전트에 신뢰할 수 있는 HTTP 가져오기 기능을 제공하는 방법을 배웠습니다.

  • 간단한 동기 방식 가져오기에는 requests 사용하기
  • 차단 없이 비동기 요청을 보내려면 httpx.AsyncClient 사용하기
  • 항상 timeout=을 설정하고 raise_for_status() 호출하기
  • 같은 호스트에 여러 번 호출할 때 세션 또는 클라이언트 재사용하기
  • 응답 유형에 따라 .json(), .text 또는 .content 사용하기

잘 작성된 가져오기 도구는 에이전트와 웹을 연결하는 관문입니다.

자주 묻는 질문

“에이전트용 HTTP 클라이언트: httpx와 requests” 강의는 무료인가요?

네 — “에이전트용 HTTP 클라이언트: httpx와 requests” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Agents 강의 전체를 잠금 해제할 수 있습니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.

“에이전트용 HTTP 클라이언트: httpx와 requests”에서 뭘 배우나요?

동기 및 비동기 HTTP 요청, 세션 관리, 헤더를 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 AI Agents을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AI Agents을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AI Agents은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“에이전트용 HTTP 클라이언트: httpx와 requests” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AI Agents 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AI Agents 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 에이전트용 HTTP 클라이언트: httpx와 requests
  2. BeautifulSoup으로 HTML 파싱하기
  3. 페이지 매김 및 동적 콘텐츠 처리
  4. 예의를 지키는 스크래핑 관행
← AI Agents(으)로 돌아가기