ไคลเอ็นต์ HTTP สำหรับตัวแทน: httpx และ requests
คำขอ HTTP แบบซิงโครนัสและอะซิงโครนัส การจัดการเซสชัน และส่วนหัว
ไคลเอ็นต์ HTTP สำหรับตัวแทน: httpx และ requests เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดไคลเอนต์ HTTP จึงสำคัญต่อเอเจนต์
เอเจนต์ AI มักจำเป็นต้องดึงข้อมูลจากแหล่งภายนอก เช่น API เว็บไซต์ และบริการต่าง ๆ ไคลเอนต์ HTTP ที่เชื่อถือได้จึงเป็นเครื่องมือหลักในชุดเครื่องมือของเอเจนต์ทุกชนิด
Python มีไลบรารี HTTP ยอดนิยมสองตัว ได้แก่ requests (ทำงานแบบลำดับเดียวและเรียบง่าย) และ httpx (รองรับทั้งการทำงานแบบลำดับเดียวและแบบอะซิงโครนัส) การเข้าใจว่าเมื่อใดควรใช้แต่ละตัวเป็นสิ่งสำคัญต่อการสร้างเอเจนต์ที่มีประสิทธิภาพ
คำขอ GET พื้นฐานด้วย requests
ไลบรารี 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() จะทำให้เกิด HTTPError สำหรับรหัสสถานะ 4xx และ 5xx หากไม่ใช้คำสั่งนี้ การตอบกลับรหัส 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 คือไคลเอนต์ HTTP สมัยใหม่ที่มี API แบบเดียวกับ requests แต่เพิ่มการรองรับการทำงานแบบอะซิงโครนัส นอกจากนี้ยังบังคับใช้การตั้งเวลาหมดอายุโดยค่าเริ่มต้น ทำให้ปลอดภัยยิ่งขึ้นสำหรับเอเจนต์ที่ใช้งานจริง
ติดตั้งด้วย 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)HTTP แบบอะซิงโครนัสด้วย httpx.AsyncClient
เมื่อเอเจนต์ทำงานอยู่ในบริบทแบบอะซิงโครนัส เช่น ใช้ร่วมกับ 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 แบบอะซิงโครนัสคือการดึง URL หลายรายการพร้อมกันด้วย asyncio.gather() วิธีนี้ช่วยเพิ่มความเร็วให้เอเจนต์ที่ต้องรับข้อมูลจากปลายทางหลายแห่งก่อนตอบกลับได้อย่างมาก
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ส่งคำขอ POST พร้อมเนื้อหา JSON
เอเจนต์มักจำเป็นต้องส่งข้อมูล ไม่ใช่เพียงอ่านข้อมูลเท่านั้น ใช้พารามิเตอร์ 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” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ไคลเอ็นต์ HTTP สำหรับตัวแทน: httpx และ requests”
คำขอ HTTP แบบซิงโครนัสและอะซิงโครนัส การจัดการเซสชัน และส่วนหัว คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ไคลเอ็นต์ HTTP สำหรับตัวแทน: httpx และ requests” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ไคลเอ็นต์ HTTP สำหรับตัวแทน: httpx และ requests
- การแยกวิเคราะห์ HTML ด้วย BeautifulSoup
- การจัดการการแบ่งหน้าและเนื้อหาแบบไดนามิก
- แนวปฏิบัติการดึงข้อมูลอย่างรับผิดชอบ