طلبات HTTP باستخدام requests وhttpx
اجلب صفحات الويب وتعامَل مع عمليات إعادة التوجيه والجلسات والرؤوس
طلبات HTTP باستخدام requests وhttpx درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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())httpx AsyncClient
شارك مثيل 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) للمصادقة الأساسية، وفئات 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» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «طلبات HTTP باستخدام requests وhttpx»؟
اجلب صفحات الويب وتعامَل مع عمليات إعادة التوجيه والجلسات والرؤوس تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «طلبات HTTP باستخدام requests وhttpx»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- طلبات HTTP باستخدام requests وhttpx
- تحليل HTML باستخدام BeautifulSoup
- بناء عنكبوت Scrapy
- التعامل مع JavaScript وإجراءات مكافحة الكشط