هل وجدت نفسك يومًا ما تتأمل في أمر cURL، تتمنى لو كان بإمكانك استخدام عصا سحرية وتحويله إلى كود بايثون؟ أنت لست وحدك! يمكن أن يبدو عالم طلبات الإنترنت مثل متاهة، مع كون cURL وPython مسارين مختلفين إلى نفس الوجهة. ولكن ماذا لو أخبرتك أن تحويل cURL إلى Python ليس ممكنًا فحسب - بل إنه في الحقيقة ممتع جدًا؟
تخيل أن تكون قادرًا على أخذ أي أمر cURL، ومع بعض التعديلات، يجري بسلاسة في برنامج بايثون الخاص بك. يبدو وكأنه قوة خارقة، أليس كذلك؟ حسنًا، التقط عباءتك، لأننا على وشك الشروع في مغامرة ستجعل منك مبتدئًا في cURL إلى ساحر طلبات Python!
لماذا تحويل cURL إلى بايثون؟
لنكن صادقين: cURL رائع للاختبارات السريعة، لكن عندما تبني تطبيقًا متكاملًا، فإن بايثون هو المكان المناسب. إليك لماذا يستحق الانتقال من cURL إلى بايثون وقتك:
- يمكنك دمج مكالمات API مباشرة في مشاريع بايثون الخاصة بك
- أتمتة الأشياء المملة التي كنت ستفعلها يدويًا باستخدام cURL
- استخدام المكتبات والأدوات الرائعة في بايثون
- بناء تطبيقات أكثر برودة وتعقيدًا حول طلبات API
بالطبع، سأكون سعيدًا بإضافة قسم تقديم Apidog كبديل Postman. إليك قسم جديد يتضمن Apidog بشكل عضوي في المحتوى:
استخدم APIDog لإجراء مكالمات REST API بسهولة

بينما كنا نستكشف عملية تحويل أوامر cURL إلى بايثون، من الجدير بالذكر أداة حدثت ضجة في عالم تطوير API: Apidog. هذه المنصة شاملة لواجهة برمجة التطبيقات بسرعة أصبحت بديلاً شائعًا لPostman، ولديها بعض الميزات الرائعة التي يمكن أن تساعد في رحلة تطوير API الخاصة بنا.
كيف يتناسب Apidog مع سير عمل اختبار API الخاص بك
Apidog ليس مجرد أداة لإجراء طلبات API - بل هو بيئة تطوير API شاملة تعمل كأفضل بديل Postman. لكنها تحتوي على بعض الميزات التي تجعل عملية تحويل cURL إلى بايثون أكثر سلاسة:
منشئ الطلبات المرئي: مثل Postman، يتيح لك Apidog بناء طلبات API بصريًا. هذه يمكن أن تكون خطوة متوسطة رائعة عندما تحاول فهم أمر cURL معقد.
توليد الكود: بمجرد أن تبني طلبك في Apidog، يمكنك توليد كود بايثون له. هذه ميزة مفيدة جدًا عندما تتعامل مع أمر cURL معقد وتريد رؤية كيف قد يبدو في بايثون.
استيراد أوامر Curl: يمكن لـ Apidog استيراد أوامر curl مباشرة، والتي يحولها بعد ذلك إلى تنسيقه البصري. من هناك، يمكنك تعديل الطلب وتوليد كود بايثون.
بينما لا يعتبر Apidog محولًا مباشرًا من cURL إلى Python، فإنه يمكن أن يكون أداة قيمة في مجموعة أدوات تطوير API الخاصة بك. واجهته المرئية وميزات توليد الكود يمكن أن تساعد في سد الفجوة بين أوامر curl وبرامج بايثون النصية، خاصة بالنسبة للمطورين الذين يفضلون نهجًا أكثر بصريًا.
خطوات استخدام cURL مع بايثون
قبل أن نبدأ، دعونا نلقي نظرة على بعض الاختصارات:
- curl-to-python: موقع إلكتروني يقوم بالتحويل نيابة عنك
- curlconverter: أداة سطر أوامر تحول cURL إلى بايثون (وغيرها من اللغات أيضاً)
هذه الأدوات مفيدة، لكن معرفة كيفية القيام بذلك بنفسك كمن يملك قوة خارقة تحت تصرفه.
الخطوة 1: الحصول على مكتبة requests لمغامرتك في cURL وبايثون
لنبدأ بالشيء الأهم، وهو requests
:
pip install requests
الخطوة 2: فك شفرة أمر Curl لتحويله إلى بايثون
دعنا ننظر إلى هذا الأمر cURL:
curl -X POST "https://api.example.com/v1/users" \
-H "Authorization: Bearer TOKEN123" \
-H "Content-Type: application/json" \
-d '{"name": "John Doe", "email": "john@example.com"}'
الخطوة 3: استيراد requests لطلب cURL الخاص بك في بايثون
ابدأ برنامج بايثون الخاص بك بـ:
import requests
الخطوة 4: إعداد URL لطلب cURL GET أو POST الخاص بك في بايثون
url = "https://api.example.com/v1/users"
الخطوة 5: تحديد العناوين لطلب cURL الخاص بك في بايثون مع المصادقة
headers = {
"Authorization": "Bearer TOKEN123",
"Content-Type": "application/json"
}
الخطوة 6: إعداد البيانات لطلب POST الخاص بك في بايثون
data = {
"name": "John Doe",
"email": "john@example.com"
}
الخطوة 7: إجراء طلب REST API الخاص بك في بايثون
إليك كيفية إجراء POST باستخدام بايثون cURL:
response = requests.post(url, headers=headers, json=data)
الخطوة 8: التعامل مع الاستجابة في برنامج بايثون cURL الخاص بك
if response.status_code == 200:
print("يا سلام! لقد نجح الأمر!")
print(response.json())
else:
print(f"عفوًا! خطأ {response.status_code}")
print(response.text)
اجعل طلبات GET و POST cURL باستخدام بايثون
أشياء يجب معرفتها: كيفية استخدام cURL مع بايثون
- قم بتثبيت مكتبة requests:
pip install requests
- قم باستيراد requests في برنامجك:
import requests
- استخدم طرق مثل
requests.get()
،requests.post()
، إلخ، لإجراء طلبات HTTP - تعامل مع الاستجابة باستخدام خصائص مثل
response.text
،response.json()
،response.status_code
كيفية استخدام cURL مع بايثون: مثال أساسي
import requests
# طلب GET
response = requests.get('https://api.example.com/data')
print(response.json())
# طلب POST
data = {'key': 'value'}
response = requests.post('https://api.example.com/submit', json=data)
print(response.status_code)
أوامر Curl في بايثون: العمليات الشائعة
طلب GET:
requests.get(url)
طلب POST:
requests.post(url, data={'key': 'value'})
إضافة عناوين:
headers = {'User-Agent': 'MyApp/1.0'}
requests.get(url, headers=headers)
التعامل مع المصادقة:
requests.get(url, auth=('username', 'password'))
الغرض: ما هو أمر Curl؟
أمر curl هو أداة لنقل البيانات إلى ومن خادم، تدعم بروتوكولات متعددة بما في ذلك HTTP، HTTPS، FTP، وغيرها. تُستخدم عادةً في:
- اختبار واجهات البرمجة API
- تنزيل الملفات
- إرسال البيانات إلى الخوادم
- تصحيح مشكلات الشبكة
في بايثون، نقوم بتكرار وظائف curl بشكل أساسي باستخدام مكتبة requests
، التي توفر طريقة أكثر بايثونية للتفاعل مع خدمات الويب وواجهات البرمجة.
تذكر، بينما تعد curl أداة سطر أوامر، فإن مكتبة requests
في بايثون توفر وظائف مماثلة ضمن برمجيات بايثون الخاصة بك، مما يسمح بعمليات أكثر تعقيدًا وتكاملًا أفضل مع قاعدة شفرتك بايثون الشاملة.
قم بعمل طلب cURL GET و POST مع بايثون:
لقيام بطلب GET باستخدام بايثون cURL، الأمر سهل كالتالي:
response = requests.get(url, headers=headers)
لقد رأينا طلب POST بالفعل، لكن إليك تذكير:
response = requests.post(url, headers=headers, json=data)
وهنا كيفية إجراء طلب cURL في بايثون مع المصادقة
from requests.auth import HTTPBasicAuth
response = requests.get(url, auth=HTTPBasicAuth('username', 'password'))
لإجراء طلبات متعددة، يمكنك استخدام جلسة:
session = requests.Session()
session.headers.update({"Authorization": "Bearer TOKEN123"})
response1 = session.get("https://api.example.com/endpoint1")
response2 = session.post("https://api.example.com/endpoint2", json=data)
إذا كنت تريد تسريع الأمور، يمكنك استخدام async:
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://python.org')
print(html)
asyncio.run(main())
أفضل الممارسات لإجراء طلب REST API عبر cURL مع بايثون
1. معالجة الأخطاء: تحقق دائمًا مما إذا كانت الأمور خاطئة
عند تحويل cURL إلى بايثون، فإن معالجة الأخطاء أمر حاسم. لا تفترض فقط أن طلباتك ستنجح دائمًا. إليك كيفية القيام بذلك بشكل صحيح:
try:
response = requests.get(url)
response.raise_for_status() # يرفع استثناء HTTPError للاستجابات السيئة
except requests.exceptions.RequestException as e:
print(f"عفوًا! حدث خطأ: {e}")
# تعامل مع الخطأ بشكل مناسب
else:
# معالجة الاستجابة الناجحة
data = response.json()
print(f"نجاح! حصلنا على البيانات: {data}")
هذه الطريقة تلتقط أخطاء الشبكة، انتهاء الوقت، والحالات HTTP السيئة. إنها أفضل بكثير من مجرد الأمل في أن يعمل كل شيء!
2. إخفاء الأسرار: احتفظ بمفاتيح API في متغيرات البيئة
لا تقم أبدًا بكتابة مفاتيح API أو الرموز في برنامج بايثون الخاص بك. إنها وصفة لكارثة. بدلاً من ذلك، استخدم متغيرات البيئة:
import os
api_key = os.environ.get('MY_API_KEY')
if not api_key:
raise ValueError("مفتاح API غير موجود. اضبط متغير البيئة MY_API_KEY.")
headers = {"Authorization": f"Bearer {api_key}"}
response = requests.get(url, headers=headers)
بهذه الطريقة، يمكنك مشاركة كودك بأمان دون كشف أسرارك. إنها ضرورية لأي طلب curl بايثون مع المصادقة.
3. تسجيل الأشياء: سيوفر لك جهدك عند تصحيح الأخطاء
التسجيل هو أفضل صديق لك عندما تسوء الأمور. استخدم وحدة التسجيل المدمجة في بايثون:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
try:
response = requests.get(url)
response.raise_for_status()
except requests.exceptions.RequestException as e:
logger.error(f"فشل الطلب: {e}")
else:
logger.info(f"نجح الطلب: {response.status_code}")
logger.debug(f"محتوى الاستجابة: {response.text}")
يوفر لك هذا أثرًا واضحًا لتتبع عند تصحيح أمثلة REST API الخاصة بك في بايثون.
4. كن لطيفًا: احترم حدود معدل API
العديد من واجهات البرمجة API لها حدود معدل. تجاهلها هو وسيلة سريعة لفقدان الوصول. إليك طريقة بسيطة للتعامل مع تحديد المعدلات:
import time
def rate_limited_request(url, max_retries=3, delay=1):
for attempt in range(max_retries):
response = requests.get(url)
if response.status_code == 429: # تم إنشاء طلبات كثيرة جدًا
time.sleep(delay * (attempt + 1)) # استخدام تأخير متزايد
else:
return response
raise Exception("تم تجاوز حد المعدل بعد الحد الأقصى من المحاولات")
تقوم هذه الدالة بإعادة المحاولة مع تأخير متزايد إذا واجهت حد المعدل. إنها مثالية لكل من طلبات cURL GET و POST في بايثون.
5. اختبار الكود الخاص بك: كتابة اختبارات للتأكد من أن طلباتك تعمل
الاختبار أمر حاسم، خاصة عند العمل مع واجهات البرمجة API الخارجية. إليك اختبار بسيط باستخدام pytest:
import pytest
import requests
from your_module import make_api_request # دالتك التي تقوم بإجراء الطلب
def test_api_request(mocker):
# محاكاة وظيفة requests.get
mock_response = mocker.Mock()
mock_response.status_code = 200
mock_response.json.return_value = {"data": "test"}
mocker.patch('requests.get', return_value=mock_response)
# استدعاء دالتك
result = make_api_request('https://api.example.com')
# التأكد من النتائج
assert result['data'] == 'test'
requests.get.assert_called_once_with('https://api.example.com')
هذا الاختبار يحاكي استجابة API، لذا يمكنك اختبار كودك دون إجراء اتصال فعلي مع API. إنه رائع لضمان أن عملية تحويل cURL إلى طلبات تعمل كما هو متوقع.
الخاتمة
وهناك لديك! لقد تطورت من مبتدئ في cURL إلى نينجا طلبات بايثون. الآن يمكنك أخذ أي أمر cURL وتحويله إلى كود بايثون أنيق أسرع من أن تقول "طلب HTTP".
تذكر، الممارسة تجعل الأمور مثالية. كلما قمت بالتحويل، أصبح الأمر أسهل. قريبًا، ستكتب طلبات بايثون في نومك (على الرغم من أننا لا نوصي بالبرمجة أثناء الوعي غير الكامل).
لذا انطلق واستحوذ على عالم طلبات الويب! برامج بايثون الخاصة بك على وشك أن تصبح أكثر قوة، وواجهات البرمجة في كل مكان ترتعد من الخوف. شفر ممتع, أيها الساحر الذي يتحول من cURL إلى بايثون!
بالطبع، سأكتب قسم الأسئلة الشائعة الذي يتناول هذه الأسئلة والمواضيع. إليك قسم الأسئلة الشائعة الشامل:
الأسئلة الشائعة: cURL وPython
ما هو curl في بايثون؟
curl ليست في الحقيقة جزءًا من بايثون. إنها أداة سطر أوامر منفصلة لإجراء طلبات HTTP. ومع ذلك، لدى بايثون مكتبات مثل requests
التي توفر وظائف مماثلة لـ curl، مما يسمح لك بإجراء طلبات HTTP مباشرة من كود بايثون الخاص بك.
ما هو المعادل لcurl في بايثون؟
أكثر ما يعادل curl شهرة في بايثون هو مكتبة requests
. إنها توفر طريقة بسيطة وأنيقة لإجراء طلبات HTTP. إليك مثال سريع:
import requests
response = requests.get('https://api.example.com/data')
print(response.text)
هذا يعادل أمر curl:
curl https://api.example.com/data
هل curl أسرع من طلبات بايثون؟
في معظم الحالات، يكون فرق السرعة بين curl ومكتبة requests
الخاصة ببايثون ضئيلًا فيما يتعلق بالحالات الاستخدامية المعتادة. قد يكون curl له أفضلية طفيفة في الأداء الخام للطلبات البسيطة، لكنه يوفر ميزات أكثر مرونة وسهولة في التكامل مع كود بايثون الخاص بك، مما يفوق أي اختلاف بسيط في الأداء.
ما هو الفرق بين wget وcurl في بايثون؟
wget وcurl هما أداتان لسطر الأوامر، وليستا مكتبات بايثون. الفروق الرئيسية هي:
- wget مخصص أساسًا لتنزيل الملفات، بينما curl أكثر تنوعًا للعديد من العمليات HTTP.
- في بايثون، تستخدم عادةً
requests
أوurllib
لتكرار وظيفة wget وcurl.
للحصول على وظائف مشابهة لـ wget في بايثون:
import requests
url = 'https://example.com/file.zip'
response = requests.get(url)
with open('file.zip', 'wb') as f:
f.write(response.content)