تحويل cURL إلى Python Requests خطوة بخطوة
تقوم بنسخ طلب من أدوات المطور (DevTools) في متصفحك كأمر cURL.
تحصل على الرؤوس (headers)، وملفات تعريف الارتباط (cookies)، ورموز المصادقة (auth tokens).
ولكن ينتهي بك الأمر بـ 30 سطرًا من كود shell فوضوي، بينما كنت تريد كود Python نظيفًا.
إليك كيفية تحويل أمر cURL إلى مكتبة Python requests يدويًا.
تحديد الطريقة (Method) إذا رأيت
--dataأو--data-rawفإن curl يستخدم POST افتراضيًا. لا تفترض أنه طلب GET لمجرد أن العلم-Xمفقود.التعامل مع الرؤوس (Headers) كل علم
-Hيصبح مدخلًا في قاموس (dictionary). عند تقسيم سلسلة الرأس (header string)، قم بالتقسيم عند أول نقطتين رأسيتين (colon) فقط. تحتوي القيم مثل الروابط (URLs) أو الطوابع الزمنية (timestamps) على نقطتين رأسيتين؛ فإذا قمت بالتقسيم عند كل نقطتين رأسيتين، ستتلف البيانات.إدارة ملفات تعريف الارتباط (Cookies) يوفر العلم
-bسلسلة مفصولة بفاصلة منقوطة. لا تضع هذه السلسلة في قاموس الرؤوس الخاص بك. بدلاً من ذلك، مررها إلى الوسيطcookiesكقاموس. هذا يسمح للمكتبة بالتعامل مع الترميز (encoding).استخدام JSON مقابل Data هذا خطأ شائع. إذا كان نوع المحتوى (content type) هو
application/jsonفاستخدم الوسيطjson=. سيقوم هذا بتحويل القاموس الخاص بك إلى سلسلة (serialization) ويضبط الرأس الصحيح لك. إذا استخدمتdata=، فستستخدمrequestsترميز النموذج (form-encoding)، مما سيؤدي إلى رفض واجهة برمجة التطبيقات (API) لطلبك.تنظيف المعلمات (Parameters) انقل سلسلة الاستعلام (query string) من الرابط (URL) إلى قاموس
params. هذا يجعل الكود الخاص بك قابلاً للقراءة. احذر من الترميز المزدوج (double-encoding)؛ فإذا كان الرابط مشفرًا بالفعل، فلا تقم بتشفيره مرة أخرى في القاموس الخاص بك.
تبدو بنية الكود النهائية كما يلي:
import requests
url = "https://api.example.com/v2/search"
params = {"lang": "en", "page": "2"}
headers = {
"accept": "application/json",
"authorization": "Bearer token_here",
"referer": "https://app.example.com/dashboard",
}
cookies = {"session": "abc123"}
payload = {"q": "nginx"}
resp = requests.post(
url,
params=params,
headers=headers,
cookies=cookies,
json=payload,
)
resp.raise_for_status()
print(resp.json())
فخاخ شائعة يجب تجنبها:
- الخلط بين
files=وdata=أثناء عمليات الرفع متعددة الأجزاء (multipart uploads). - تقسيم الرؤوس (headers) عند كل نقطتين رأسيتين.
- الترميز المزدوج لمعلمات الاستعلام (query parameters).
المصدر: https://dev.to/wanfeng/from-browser-curl-to-clean-python-requests-code-step-by-step-25oh