مقدمة عن مكتبة Requests
Requests — هي مكتبة بسيطة وقوية للتعامل مع طلبات HTTP في بايثون. توفر واجهة سهلة لتنفيذ عمليات REST API، تحميل البيانات من صفحات الويب، رفع الملفات، وإدارة المصادقة. بفضل تركيبها المختصر ووظائفها المتعددة، أصبحت Requests المعيار الفعلي بين عملاء HTTP في بايثون.
تم إنشاء مكتبة Requests بواسطة Kenneth Reitz في عام 2011 بهدف جعل طلبات HTTP في بايثون بسيطة وسلسة قدر الإمكان. تم بناؤها فوق urllib3 وتوفر واجهة برمجية عالية المستوى للتعامل مع بروتوكول HTTP.
مزايا Requests مقارنة بـ urllib
- تركيب أكثر وضوحًا — دوال ومعاملات سهلة الفهم
- معالجة تلقائية للكوكيز وإعادة التوجيه — لا حاجة لإعدادات إضافية
- دعم مدمج لـ JSON والهيدرات والنماذج — تعامل سهل مع الصيغ الشائعة
- دعم الجلسات والبروكسي والمصادقة — مجموعة كاملة من الأدوات للتعامل مع خدمات الويب
- دعم جميع دوال HTTP — GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
- فك تشفير تلقائي للمحتوى — معالجة ذكية للترميزات
- دعم مدمج لـ SSL — اتصالات آمنة بشكل افتراضي
تثبيت المكتبة واستيرادها
التثبيت باستخدام pip:
pip install requests
لتحديث المكتبة إلى أحدث إصدار:
pip install --upgrade requests
استيراد المكتبة:
import requests
دوال طلبات HTTP الأساسية
إرسال طلبات GET
تُستخدم طلبات GET لجلب البيانات من الخادم:
response = requests.get('https://api.example.com/data')
print(response.status_code) # رمز الاستجابة
print(response.text) # نص الاستجابة
جلب بيانات JSON:
response = requests.get('https://api.example.com/users')
data = response.json() # تحويل تلقائي إلى قاموس بايثون
print(data)
إرسال طلبات POST
تُستخدم طلبات POST لإرسال البيانات إلى الخادم:
payload = {'username': 'admin', 'password': '123'}
response = requests.post('https://api.example.com/login', data=payload)
إرسال بيانات JSON:
user_data = {'name': 'أحمد', 'email': 'ahmed@example.com'}
response = requests.post('https://api.example.com/users', json=user_data)
استخدام PUT و PATCH و DELETE
# PUT - تحديث كامل للمورد
requests.put('https://api.example.com/user/1', json={'name': 'اسم جديد', 'email': 'new@example.com'})
# PATCH - تحديث جزئي للمورد
requests.patch('https://api.example.com/user/1', json={'active': True})
# DELETE - حذف المورد
requests.delete('https://api.example.com/user/1')
# HEAD - جلب الهيدرات فقط
response = requests.head('https://api.example.com/user/1')
print(response.headers)
التعامل مع معاملات الطلب
يمكن تمرير معاملات URL عبر قاموس:
params = {'search': 'بايثون', 'limit': 10, 'page': 1}
response = requests.get('https://api.example.com/search', params=params)
print(response.url) # يعرض الرابط الكامل مع المعاملات
يمكن أيضًا تمرير المعاملات كقائمة من tuples:
params = [('tag', 'python'), ('tag', 'web'), ('limit', 20)]
response = requests.get('https://api.example.com/posts', params=params)