طريقة الاستخدام
- ألصق أمر curl واحداً في أمر curl. أبقِ علامات التنصيص حول القيم التي فيها مسافات.
- اقرأ ما الذي فعلته الترجمة لتتحقق من كل خيار: الطريقة وسلسلة الاستعلام والجسم والترويسات.
- انسخ كود Python إلى سكربتك بعد تثبيت مكتبة requests، أو كود JavaScript باستعمال fetch إلى صفحة.
- إذا ظهرت ملاحظة أو خطأ، فأصلح الأمر أولاً، ثم انسخ الكود من جديد.
أي خيارات curl تقرؤها الأداة
تقرأ الأداة الخيارات التي تستعملها معظم الطلبات. وكل خيار يغيّر استدعاء Python بطريقة معروفة، وأي خيار آخر يوقف التحويل برسالة، فلا يُخمَّن شيء.
- -X و--request تضبطان الطريقة كما كُتبت. ويقول دليل curl إنهما تغيّران الكلمة المرسلة فقط.
- -H و--header تضيفان ترويسات. فالسطر مثل X-Flag; يرسل قيمة فارغة، و-H مع قيمة فارغة بعد النقطتين يزيل ترويسة.
- -d و--data و--data-raw و--data-binary تضبط الجسم. تُدمج قيم -d المتعددة بعلامة &. ومع -G تصبح سلسلة استعلام بدلاً من ذلك.
- -G و--get، و-I و--head، و-L و--location تغيّر الطريقة أو معالجة التحويلات.
- -u و--user، و-A و--user-agent، و-b و--cookie تضبط مجموعة المصادقة، وترويسة User-Agent، وترويسة Cookie.
- --json يرسل القيمة جسماً ويضبط ترويسات JSON، وتستطيع ترويسة -H أن تتجاوزها.
كيف يُقرأ الأمر
يُقسم النص إلى كلمات كما تقسمها صدفة POSIX. تحتفظ علامات التنصيص المفردة بكل حرف. وداخل علامات التنصيص المزدوجة لا تهرب الشرطة المائلة العكسية إلا الرموز $ والعلامة الخلفية وعلامة التنصيص المزدوجة والشرطة المائلة العكسية والسطر الجديد. وتعني الشرطة المائلة العكسية في آخر السطر أنه متصل بالسطر التالي. ولا تُنفَّذ توسعات الصدفة مثل $HOME، فتُذكر هذه القيم بوصفها أخطاء.
ما لا تفحصه الأداة
- لا ترسل الأداة الطلب، فلا تستطيع أن تقول هل يقبله الخادم.
- يطبق المتصفح قواعد المصدر المختلف على fetch. فقد يُحجب طلب إلى موقع آخر هناك، حتى إذا عمل الأمر نفسه في الطرفية. والأداة لا تختبر ذلك.
- لا تفتح الأداة الملفات المسماة بالرمز @، ولا تقرأ ملفات تعريف الارتباط.
- تكتب Python فقط. ويستعمل الكود مكتبة requests، وتُثبَّت منفصلة.
مثال محلول: طلب PUT بجسم JSON
يرسل الأمر طلب PUT إلى عنصر واحد بجسم JSON. تأتي الطريقة من -X، والترويسة من -H، والجسم من -d. ولاستدعاء Python الأجزاء الثلاثة نفسها، وتذكر قائمة الخطوات أي خيار أعطى أي قيمة.
| خيار curl | وسيط Python | القيمة في الكود |
|---|---|---|
| -X PUT | method | 'PUT' |
| -H 'Content-Type: application/json' | headers | 'Content-Type': 'application/json' |
| -d '{"name": "Ada"}' | data | '{"name": "Ada"}' |
الأسئلة الشائعة
لماذا يستعمل الكود requests وليس مكتبة أخرى؟
requests هي مكتبة Python التي تحوّل إليها الأداة، ودالة الطلب فيها تأخذ الطريقة والعنوان والترويسات والبيانات والمصادقة في استدعاء واحد. ويعمل الاستدعاء نفسه مع كل طريقة يذكرها الأمر.
لماذا يُرسل طلبي بطريقة POST وأنا لم أكتب -X؟
يقول دليل curl إن -d يستعمل POST، وإن --json يرسل POST أيضاً. اكتب -X مع الطريقة التي تريدها، مثل -X PUT، لتغيير الكلمة المرسلة.
ماذا يفعل -G في التحويل؟
ينقل البيانات من -d إلى العنوان كسلسلة استعلام، ويجعل الطلب GET كما يصف الدليل. فيحمل استدعاء Python العنوان الكامل ولا جسم له.
هل تُرسل كلمات المرور في أمري إلى مكان ما؟
لا. يُقرأ الأمر داخل متصفحك، ولا يُخزَّن شيء ولا يُرسل إلينا. ومع ذلك استعمل كلمة مرور أو رمزاً للتجربة فقط في صفحة لا تتحكم فيها.
لماذا تذكر النتيجة عمليات التحويل بين العناوين؟
يتبع curl عمليات التحويل بين العناوين فقط مع -L. ويتبعها requests افتراضياً لكل الطرق، وكذلك fetch، لذلك تخبرك الملاحظة كيف تطابق استدعاء curl الذي لا يحتوي على -L.
هل تستطيع الأداة قراءة بيانات من ملف يُسمى بالرمز @؟
لا. لا تفتح الأداة الملفات، فتُذكر قيمة @ بوصفها خطأً. ألصق البيانات نفسها في الأمر.
المصادر
- دليل curl، الخيارات -X و-H و-d و-G و-I و-u و-A و-b و-L و--json (باللغة الإنجليزية)
- POSIX Shell Command Language، القسم 2.2 Quoting (باللغة الإنجليزية)
- Requests: مرجع واجهة request وget وpost وhead (باللغة الإنجليزية)
آخر مراجعة للأرقام والنص: الثلاثاء، 30 جمادى الأولى 1448 بعد الهجرة.