คำขอ HTTP ด้วย requests และ httpx
ดึงหน้าเว็บ จัดการการเปลี่ยนเส้นทาง เซสชัน และส่วนหัว
คำขอ HTTP ด้วย requests และ httpx เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
ไลบรารี requests
requests เป็นไลบรารี HTTP แบบซิงโครนัสมาตรฐาน ใช้งานง่าย ผ่านการพิสูจน์มาอย่างดี และเหมาะอย่างยิ่งสำหรับสคริปต์กับการเรียก API แบบครั้งเดียว
# pip install requests
import requests
r = requests.get("https://api.github.com/users/octocat")
print(r.status_code) # 200
print(r.json()["login"]) # octocatพารามิเตอร์การค้นหาและส่วนหัว
ส่งพารามิเตอร์การค้นหาด้วย params= และส่งส่วนหัวแบบกำหนดเองด้วย headers=
import requests
r = requests.get(
"https://api.example.com/search",
params={"q": "python", "page": 1},
headers={"Authorization": "Bearer my-token"}
)
print(r.url) # full URL with query stringPOST พร้อมเนื้อหา JSON
ส่งข้อมูล JSON ด้วย json= — requests จะกำหนด Content-Type: application/json ให้โดยอัตโนมัติ
import requests
r = requests.post(
"https://api.example.com/users",
json={"name": "Alice", "email": "alice@example.com"}
)
print(r.status_code) # 201
print(r.json())ออบเจ็กต์เซสชัน
ใช้ requests.Session เพื่อคงส่วนหัว คุกกี้ และการรวมการเชื่อมต่อไว้ตลอดการเรียกหลายคำขอ
import requests
with requests.Session() as s:
s.headers.update({"Authorization": "Bearer token"})
users = s.get("https://api.example.com/users").json()
profile = s.get("https://api.example.com/me").json()ระยะหมดเวลาและการลองใหม่
กำหนดระยะหมดเวลาเสมอ ใช้ urllib3.util.retry.Retry ร่วมกับ HTTPAdapter เพื่อให้ลองส่งคำขอใหม่โดยอัตโนมัติ
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
s = requests.Session()
retry = Retry(total=3, backoff_factor=1)
s.mount("https://", HTTPAdapter(max_retries=retry))
r = s.get("https://api.example.com/data", timeout=5)การจัดการข้อผิดพลาด
เรียกใช้ r.raise_for_status() เพื่อให้เกิด HTTPError เมื่อได้รับการตอบกลับสถานะ 4xx/5xx
import requests
try:
r = requests.get("https://api.example.com/data")
r.raise_for_status()
data = r.json()
except requests.HTTPError as e:
print(f"HTTP error: {e.response.status_code}")
except requests.ConnectionError:
print("Network unreachable")การดาวน์โหลดไฟล์
สตรีมการดาวน์โหลดไฟล์ขนาดใหญ่ด้วย stream=True เพื่อหลีกเลี่ยงการโหลดข้อมูลทั้งหมดเข้าสู่หน่วยความจำ
import requests
with requests.get("https://example.com/large.zip", stream=True) as r:
r.raise_for_status()
with open("large.zip", "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)httpx — HTTP แบบอะซิงโครนัสยุคใหม่
httpx มี API แบบเดียวกับ requests แต่รองรับการทำงานแบบอะซิงโครนัส ใช้สำหรับแอป FastAPI และเวิร์กโฟลว์แบบอะซิงโครนัส
# pip install httpx
import httpx
# Synchronous:
r = httpx.get("https://httpbin.org/get")
print(r.json())
# Asynchronous:
import asyncio
async def main():
async with httpx.AsyncClient() as c:
r = await c.get("https://httpbin.org/get")
print(r.json())
asyncio.run(main())AsyncClient ของ httpx
ใช้ AsyncClient เดียวร่วมกันระหว่างคำขอเพื่อรวมการเชื่อมต่อ สร้างในช่วงเริ่มต้นและปิดในช่วงปิดการทำงาน
import httpx, asyncio
CLIENT: httpx.AsyncClient | None = None
async def startup():
global CLIENT
CLIENT = httpx.AsyncClient(timeout=10)
async def shutdown():
await CLIENT.aclose()ตัวช่วยการยืนยันตัวตน
ทั้ง requests และ httpx รองรับตัวช่วยการยืนยันตัวตน: auth=(user, pass) สำหรับการยืนยันตัวตนแบบ Basic และคลาส Auth แบบกำหนดเองสำหรับการยืนยันตัวตนด้วยโทเค็น
import httpx
class BearerAuth(httpx.Auth):
def __init__(self, token): self.token = token
def auth_flow(self, request):
request.headers["Authorization"] = f"Bearer {self.token}"
yield request
async with httpx.AsyncClient(auth=BearerAuth("my-token")) as c:
r = await c.get("https://api.example.com/me")การจำลอง HTTP ในการทดสอบ
ใช้ respx (สำหรับ httpx) หรือ responses (สำหรับ requests) เพื่อจำลองการเรียก HTTP ในการทดสอบ
# pip install respx
import httpx, respx, asyncio
@respx.mock
async def test_api():
respx.get("https://api.example.com/users").mock(
return_value=httpx.Response(200, json=[{"id":1}])
)
async with httpx.AsyncClient() as c:
r = await c.get("https://api.example.com/users")
assert r.json() == [{"id": 1}]ตรวจสอบความเข้าใจ
response.raise_for_status() ทำหน้าที่อะไร
สรุปทบทวน
ใช้ requests สำหรับ HTTP แบบซิงโครนัส ใช้ httpx เมื่อจำเป็นต้องทำงานแบบอะซิงโครนัส กำหนดระยะหมดเวลาเสมอ ใช้เซสชันเพื่อใช้การเชื่อมต่อซ้ำ เรียกใช้ raise_for_status() และสตรีมการดาวน์โหลดขนาดใหญ่ จำลอง HTTP ในการทดสอบด้วย respx หรือ responses
คำถามที่พบบ่อย
บทเรียน “คำขอ HTTP ด้วย requests และ httpx” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คำขอ HTTP ด้วย requests และ httpx” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คำขอ HTTP ด้วย requests และ httpx”
ดึงหน้าเว็บ จัดการการเปลี่ยนเส้นทาง เซสชัน และส่วนหัว คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “คำขอ HTTP ด้วย requests และ httpx” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คำขอ HTTP ด้วย requests และ httpx
- การแยกวิเคราะห์ HTML ด้วย BeautifulSoup
- การสร้างสไปเดอร์ Scrapy
- การจัดการ JavaScript และมาตรการป้องกันการดึงข้อมูล