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