에이전트용 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 doneJSON 본문으로 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 에이전트용 HTTP 클라이언트: httpx와 requests
- BeautifulSoup으로 HTML 파싱하기
- 페이지 매김 및 동적 콘텐츠 처리
- 예의를 지키는 스크래핑 관행