0Pricing
AI Agents · บทเรียน

ไคลเอ็นต์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ไคลเอ็นต์ HTTP สำหรับตัวแทน: httpx และ requests
  2. การแยกวิเคราะห์ HTML ด้วย BeautifulSoup
  3. การจัดการการแบ่งหน้าและเนื้อหาแบบไดนามิก
  4. แนวปฏิบัติการดึงข้อมูลอย่างรับผิดชอบ
← กลับไปที่ AI Agents