منشئ أوامر curl
أنشئ أمر curl حقيقيًا وقابلًا للتشغيل من طريقة HTTP وعنوان URL والترويسات والجسم وخيارات المصادقة — مع تطبيق تنصيص الصدفة (shell) الصحيح تلقائيًا — وانسخه بضغطة واحدة.
239 مشاهدة
تاريخ موجز لـcurl
أُنشئ curl عام 1998 على يد المطوّر السويدي دانيال ستينبرغ (Daniel Stenberg)، الذي كتب نسخته الأولى لجلب أسعار صرف العملات تلقائيًا لبوت IRC في قناة دردشة سويدية — حاجة صغيرة وشخصية، لا خطة كبرى لبناء بنية تحتية. استمر الناس في طلب المزيد من البروتوكولات والخيارات، فتحوّلت هذه الأداة الصغيرة إلى أداة سطر أوامر عامة الغرض لنقل البيانات عبر HTTP وHTTPS وFTP، وفي النهاية عشرات البروتوكولات الأخرى. ظل ستينبرغ المشرف الرئيسي على curl طوال عمر الأداة تقريبًا منذ ذلك الحين؛ واليوم يأتي curl مثبَّتًا افتراضيًا على macOS، وعمليًا في كل توزيعة لينكس، ومنذ عام 2018 في Windows 10 وما بعده، ويُقدَّر أنه يعمل على مليارات الأجهزة حول العالم — من أجهزة التوجيه (routers) والسيارات إلى أجهزة الألعاب وتقريبًا كل خط أنابيب تكامل مستمر (CI) يتواصل مع واجهة برمجة تطبيقات. ما بدأ كحل لمشكلة شخصية ضيقة أصبح اليوم على الأرجح عميل HTTP لسطر الأوامر الأوسع انتشارًا على الإطلاق، وأحد أكثر مكوّنات البرمجيات مفتوحة المصدر التي يعتمد عليها الإنترنت بصمت.
فهم الرايات (Flags) التي تُولّدها هذه الأداة
لا يتبع curl افتراضيًا إعادة توجيه HTTP. إذا استجاب الخادم برمز حالة 301 أو 302 وترويسة Location تشير إلى مكان آخر، فإن curl البسيط يطبع استجابة إعادة التوجيه هذه — أو جسمًا فارغًا — ويتوقف؛ فهو لا يلاحق عنوان URL الجديد تلقائيًا كما يفعل متصفح الويب بصمت. هذا ما يُربك عددًا هائلًا من مستخدمي curl لأول مرة: عنوان URL يعمل بشكل مثالي في المتصفح يُعيد استجابة مربكة فارغة أو خاطئة من curl، دون سبب ظاهر، لأن المتصفح تبع إعادة توجيه لم يتبعها curl. الحل هو راية -L (--location)، التي تخبر curl باتباع سلسلة إعادة التوجيه حتى وجهتها النهائية. وهي متطلَّب شائع لدرجة أن كثيرًا من المهندسين يستخدمون -L افتراضيًا في كل مرة لا يختبرون فيها سلوك إعادة التوجيه نفسه عمدًا.
بمجرد أن يتضمن أمر ما ترويسات أو محتوى جسم يحتوي على مسافات أو علامات اقتباس أو أحرف خاصة بالصدفة (shell) ($ و& و; وعلامات backtick)، يتوقف وضع علامات الاقتباس عن كونه أمرًا تجميليًا — فهو الفارق بين طلب يعمل وآخر تُشوِّهه الصدفة قبل أن يراه curl أصلًا. ترويسة مثل Authorization: Bearer abc 123 مكتوبة دون علامات اقتباس تُقسَّم بواسطة الصدفة عند المسافة، فيتلقى curl Authorization: وBearer كوسيطين منفصلين ومكسورين بدلًا من واحد. إحاطة القيمة كاملة بعلامتي اقتباس مفردتين يخبر الصدفة بمعاملة كل ما بداخلها حرفيًا، بما في ذلك المسافات — لكن علامتي الاقتباس المفردتين لا يمكنهما احتواء حرف علامة اقتباس مفردة حرفي بداخلهما، لأن هذا الحرف هو ما يُغلق الاقتباس نفسه. الحل القياسي لهذه الحالة هو إغلاق علامة الاقتباس، ثم إدراج علامة اقتباس مفردة مسبوقة بشرطة مائلة عكسية للهروب منها، ثم إعادة فتح علامة الاقتباس: '\''. تُطبّق هذه الأداة هذا الهروب (escaping) تلقائيًا على كل قيمة تُدرجها، بحيث تنتج الترويسات ومحتوى الجسم وبيانات اعتماد المصادقة التي تحتوي على مسافات أو علامات اقتباس أو أحرف خاصة أخرى دائمًا أمرًا يعمل بشكل صحيح — دون الحاجة لحفظ قواعد الهروب بنفسك.
الأسئلة الشائعة
لماذا أحتاج إلى راية -L في بعض أوامر curl؟
لا يتبع curl إعادة توجيه HTTP افتراضيًا. إذا استجاب الخادم الذي تستدعيه برمز حالة 301 أو 302 وترويسة Location، يعرض curl البسيط استجابة إعادة التوجيه هذه بدلًا من المحتوى النهائي ويتوقف عند ذلك. تتبع المتصفحات إعادة التوجيه بصمت، ولهذا فإن عنوان URL "يعمل في المتصفح" قد يُعيد استجابة فارغة أو غير متوقعة من curl. إضافة -L (--location) تخبر curl باتباع سلسلة إعادة التوجيه تلقائيًا حتى الوصول إلى الوجهة النهائية.
لماذا يفشل أمر curl لدي عندما تحتوي ترويسة على مسافة؟
الصدفة (shell) — وليس curl — هي ما يقسّم سطر الأوامر إلى وسيطات منفصلة، وهي تقسّم افتراضيًا عند المسافات غير المحاطة بعلامات اقتباس. قيمة ترويسة مثل Bearer abc123 مكتوبة دون علامات اقتباس تصبح كلمتين منفصلتين تُسلَّمان إلى curl وكأنهما وسيطان مختلفان، مما يكسر الترويسة. إحاطة القيمة بعلامتي اقتباس مفردتين تخبر الصدفة بـ"معاملة كل ما بالداخل كقطعة واحدة حرفية، بما في ذلك المسافات" — وهذا بالضبط ما تفعله هذه الأداة تلقائيًا لكل حقل تملؤه.
ما الفرق بين وضع JSON ووضع Raw لجسم الطلب؟
يضيف وضع JSON تلقائيًا ترويسة Content-Type: application/json مع جسمك، مخبرًا الخادم بتحليل الحمولة كـJSON — تتطلب معظم واجهات برمجة التطبيقات الحديثة وجود هذه الترويسة وإلا رفضت الطلب أو أساءت تفسيره. يُرسل وضع Raw النص الذي كتبته بالضبط دون افتراض أي نوع محتوى، وهو الخيار الصحيح للبيانات المشفَّرة كنموذج (form-encoded)، أو النص العادي، أو XML، أو أي جسم تريد فيه ضبط ترويسة Content-Type الخاصة بك يدويًا عبر قسم الترويسات.
هل مصادقة رمز Bearer هي نفسها المصادقة الأساسية (Basic)؟
لا، تعملان بشكل مختلف. ترسل مصادقة Bearer ترويسة Authorization: Bearer <token> تحمل رمز وصول معتم، صادرًا عادةً من تدفق OAuth أو نظام مفاتيح API — يبحث الخادم عن الرمز بدلًا من فك تشفيره. ترسل المصادقة الأساسية Authorization: Basic <base64(username:password)>، وهي ببساطة اسم المستخدم وكلمة المرور مدمجَين ومُرمَّزين بـbase64 — الترميز ليس تشفيرًا، لذا يجب استخدام المصادقة الأساسية عبر HTTPS فقط، وليس عبر HTTP العادي مطلقًا، وإلا أُرسلت بيانات الاعتماد فعليًا بنص واضح.
من أنشأ curl، وهل لا يزال يُصان بفعالية؟
أُنشئ curl عام 1998 على يد دانيال ستينبرغ، في الأصل لجلب أسعار صرف العملات لبوت IRC. ظل ستينبرغ المشرف الرئيسي عليه طوال تاريخ curl تقريبًا، ولا يزال يطوّره بفعالية اليوم. بعيدًا عن كونه مشروعًا هاويًا، أصبح curl اليوم أحد أكثر مكوّنات البرمجيات انتشارًا في العالم — مدمجًا في أنظمة التشغيل والأجهزة المدمجة وعدد لا يُحصى من التطبيقات — وتُعامَل سلامته ودقته بجدية مماثلة من قِبل مجتمع كبير من المساهمين.
أدوات مشابهة
الإبلاغ عن مشكلة
منشئ أوامر curl
التعليقات
لا توجد تعليقات بعد — كن أول من يكتب تعليقًا!