محوّل curl
حوّل أمرًا واحدًا إلى كود
يحوّل محوّل curl هذا أمرًا واحدًا إلى كود يعمل. اختر PHP أو Python أو JavaScript أو Go أو Ruby أو Java أو C# أو HTTP خام. لذا تلصق مرة، ثم تتوقف عن إعادة كتابة الترويسات يدويًا. يحدث العمل في متصفحك، ولا نرفع شيئًا.
- مجانيالسعر
- ثلاث عشرةاللغات
- بلاالتسجيل
- بلاالرفع
curl Converter
حوّل أمر curl واحد إلى PHP أو Python أو JavaScript أو Go أو Ruby أو Java أو C# أو HTTP خام
جاهز. الصق أمر curl أو اضغط تجربة مثال.
ماذا يفعل محوّل curl
يكتب أمر curl طلبًا كسطر أوامر. ويحوّل محوّل curl هذا ذلك السطر إلى كود تضعه في مشروع. لذلك تحفظ الترويسة التي نسختها من devtools قيمتها الدقيقة، وتتوقف عن إعادة كتابتها.
تعود أربعة أشياء من لصقة واحدة. أولًا الطلب نفسه: الطريقة والعنوان والترويسات والنص، مقروءًا مرة أخرى لتفحصه. ثم الكود باللغة التي اخترت. بعد ذلك الخيارات التي كان curl سيطبّقها، مثل متابعة إعادة التوجيه أو مهلة. وأخيرًا قائمة بكل ما اضطر القارئ لاتخاذه بنفسه.
تلك القائمة الأخيرة أهم مما تبدو. فالافتراض الصامت داخل الكود الناتج خطأ تكتشفه في الإنتاج. لذا تطبع الصفحة كل قرار بجانب الكود.
لا تثبّت شيئًا ولا ترسل شيئًا. لذا تلصق أمرًا، وتقرأ الكود، وتغلق التبويب متى شئت.
كيف يقرأ محوّل curl أمرًا
ينقسم العمل إلى ثلاث مرات. أولًا، تقسّم الصفحة الأمر إلى كلمات كما تفعل الصدفة. ثم تقرأ كل كلمة كخيار أو قيمة أو عنوان. وأخيرًا تسلّم الطلب إلى كاتب باللغة التي اخترت.
يتبع التقسيم قواعد الصدفة في الاقتباس، لأن أمرًا ملصوقًا من devtools يعتمد عليها. فالنص داخل علامتي اقتباس مفردتين كلمة واحدة حتى لو حمل مسافات. والشرطة المائلة العكسية في نهاية السطر تصل به إلى السطر التالي.
في الواقع، قراءة الخيارات هي ما يثبت قيمة المحوّل. وبما أن curl يسرد أكثر من مئتي خيار، فبعضها فقط يستحق الحمل. والخيارات المهمة تغيّر ما يراه الخادم. وهي الطريقة والترويسات والنص والكوكيز وإعادات التوجيه والمهلة. وتُبلّغ الصفحة عن البقية بدل تخمينها.
لا تلمس الكتّاب الشبكة أبدًا. لذا تعمل الصفحة دون اتصال. وتعمل أيضًا على جهاز بلا curl مثبّت. ويمكن أن يشير أمر إلى عنوان لا يصل إليه متصفحك، وتظل الصفحة تحوّله.
لماذا الاقتباس هو الجزء الصعب
المحوّل الذي يقسم على المسافات وحده يخطئ في معظم الأوامر. ولأن قيمة الترويسة تحمل مسافة غالبًا، يقسمها التقسيم الساذج إلى نصفين. عندئذ يحمل الكود نصف رمز ويفشل الطلب بـ 401.
لذا يتتبع القارئ حالة الاقتباس وهو يسير في السطر. فعلامة الاقتباس المزدوجة تجمع سلسلة كلمات في واحدة، والمفردة تفعل الشيء نفسه بلا أي تهريب داخلها. ولا تُحتسب إلا علامة تفتح وتغلق في المواضع الصحيحة.
والشرطة المائلة العكسية هي الحالة الثالثة. خارج الاقتباس تهرب الحرف التالي، وقبل سطر جديد تحذف السطر الجديد نفسه. ولهذا يبقى أمر ملصوق على عشرين سطرًا مقروءًا كأمر واحد.
ما اللغات التي يكتبها
تغطي ثلاث عشرة وجهة العمل الذي يأتي به الجميع تقريبًا. في PHP هناك cURL العادي وعميل Guzzle. وفي Python هناك requests. وفي JavaScript هناك fetch وaxios ووحدة http في Node.js. وGo وRuby وJava وC# يأخذ كل منها واحدًا. ثم تأتي HTTP خام وسطر curl نظيف وJSON.

كل كاتب دالة صغيرة على كائن الطلب نفسه. ولهذا ترى كل وجهة بايتات متطابقة. فالنص الذي يرسله مثال PHP هو النص الذي يرسله مثال Go. ولا شيء يقصّ ترويسة حسب اللغة أو يعيد تنسيق الحمولة في صمت.
يستهدف كاتبا PHP وPython كودًا يمكنك تشغيله كما هو. لذا يفتح كاتب PHP بالوسم، ويضبط الخيارات ويغلق المقبض. ويستورد كاتب Python المكتبة requests، ويبني الترويسات ويطبع الحالة والنص معًا.
ينقسم JavaScript إلى ثلاثة عن قصد. كذلك، فـ fetch يأتي في المتصفح. وaxios يجلب راحته الخاصة، ووحدة http في Node.js تناسب نصًا بلا اعتماديات. لذا يستحق الثلاثة مكانًا.
وجهتان للقراءة أكثر من التنفيذ. تطبع HTTP خام الرسالة كما تمر على السلك. وهذا أسرع طريق لرؤية هل الترويسة موجودة فعلًا. ويطبع JSON الطلب نفسه كبيانات، جاهزة لتجهيزة اختبار.
ماذا يعرض لوح القراءة
قبل أن يظهر أي كود، تطبع الصفحة الطلب الذي فهمته. تسعة وقائع يأخذ كل منها سطرًا. وهي تغطي الطريقة والعنوان وعدد الترويسات وحجم النص ونوع المحتوى. ثم يتبعها التفويض والكوكيز والخيارات والمهلة.

العناوين ليست الجزء المهم. بل النقطة هي الفحص. فالترويسة التي ضاعت تظهر هنا قبل أن تلصق شيئًا. وكذلك النص الذي وصل كنموذج بدل JSON. وكلمة السر في المكان الخطأ تظهر أيضًا.
تطبع الصفحة قائمة الترويسات كاملة في الأسفل، ترويسة لكل سطر. لذلك تقارن ما كان curl سيرسله بما يتوقعه خادمك. عندئذ يكون الفرق مرئيًا بدل مفترضًا.
يسمّي اللوح الخيارات بكلمات بسيطة. فقارئ الكود لا ينبغي أن يعرف أن -L تعني متابعة إعادة التوجيه. يقول اللوح follow أو insecure أو compressed أو silent بدلًا منها.
من devtools إلى نص برمجي بلصقة واحدة
الطريق المعتاد هو المتصفح. فكل متصفح كبير يستطيع نسخ طلب كـ curl. لذا افتح لوح الشبكة، وانقر بالزر الأيمن على النداء الذي فشل، وانسخه والصقه هنا. ويصل الأمر بالترويسات الحقيقية والنص الحقيقي والكوكيز الحقيقية.

وهذا أيضًا الطريق المعتاد لتنقيح نداء خاص. لذا تعيد إنتاج طلب فاشل ككود. ثم تضيف print وتنظر ماذا يقول الخادم، بدل التخمين من لوح الشبكة.
لا تهم أسطر الفصل. لذلك تقرأ الصفحة أمرًا منسوخًا على عشرين سطرًا كما تقرأ سطرًا واحدًا. ولا يهم الإزاحة كذلك.
كيف تستخدم محوّل curl
أربع خطوات، ولا تحتاج أي منها إلى حساب.
- 1
انسخ الأمر
لذا افتح devtools، وانقر بالزر الأيمن على الطلب، واختر نسخ كـ curl. ومن مستند أو README، حدد الأمر كاملًا بما فيه الشرطات المائلة العكسية في نهاية السطر.
- 2
الصقه في المربع الأيسر
ثم الصق كل شيء. يأخذ المربع الأمر تمامًا كما نسخته. لذا لا حاجة إلى وصل الأسطر أو ترتيب الإزاحة أولًا.
- 3
افحص لوح القراءة
بعد ذلك، قارن الوقائع بما تتوقعه. فالترويسة المفقودة أسهل رصدًا هنا من الكود في الأسفل. وكذلك النص الذي وصل كنموذج.
- 4
اختر لغة وخذ الكود
أخيرًا، اختر وجهة ثم انسخها أو نزّلها. واقرأ أيضًا ملاحظات القرار: فالصفحة تسرد عن قصد كل ما خمّنه القارئ.
لماذا تستخدم محوّل curl هذا
أربعة أسباب، وكل سبب يتعلق بالطلب لا بالكود.
لصقة واحدة، ثلاث عشرة وجهة
لذا تقارن لغتين جنبًا إلى جنب وتحسم الجدل حول الترويسة المفقودة. ولأن الطلب نفسه يغذّي كل كاتب، تتفق الأمثلة بينها بالبناء.
لا شيء يخرج من المتصفح
لذلك يبقى رمز bearer أو كوكي جلسة على جهازك. فلا رفع ولا سجل ولا حساب. وهذا مهم حين يحمل أمر سرًا حيًا.
تطبع الصفحة كل افتراض
لأن الافتراض الصامت داخل الكود الناتج خطأ تكتشفه لاحقًا، تسرد الصفحة كل قرار بجانب الكود، مع الخيار الذي جاء منه.
كل مثال PHP يمر على php -l أولًا
ثم تكتب البنية كل مثال PHP في ملف. وتمرّر كل واحد عبر php -l قبل أن تُنشر الصفحة. لذا تُلتقط أخطاء الاقتباس هنا لا في محرّرك.
القواعد التي يحفظها هذا المحوّل
ست قواعد، وهي ما يجعل الناتج موثوقًا لا مجرد معقول.
- الطريقة تأتي من الأمر -X صريح يفوز. وإلا تنطبق قواعد curl. فالنص يجعله POST، وخيار HEAD يجعله HEAD، والباقي يبقى GET.
- نوع محتوى مصرّح به يغلب الافتراضي يرسل devtools الترويسة دائمًا. لذا يحمل الكود القيمة التي نسختها، حتى حين كان curl سيخمّن شيئًا آخر.
- أجزاء النص المتكررة تتصل بعلامة عطف لذا تصير ثلاثة خيارات -d نص نموذج واحدًا، تمامًا كما يرسلها curl. وتقول الصفحة إنها وصلتها، لتعلم.
- التوثيق الأساسي يُبنى ولا يُنسخ عندئذ يصير اسم المستخدم وكلمة السر من -u ترويسة Authorization واحدة. لذا يرسل الكود البايتات نفسها دون حاجة curl إلى فعل ذلك.
- لا شيء يُرسل إلى أي مكان القراءة والكتابة تجريان معًا في متصفحك. لذا يحوّل أمر يشير إلى مضيف داخلي جيدًا، ولا يُجرى أي طلب أبدًا.
- الرفض نتيجة لذا تُبلّغ الصفحة عن خيار بلا مقابل في اللغة الهدف. ولا تُسقط ذلك الخيار صامتة أبدًا. ثم تقرر أنت ما تفعل، والخيار مسمّى.
أخطاء تجنبها مع الطلبات الناتجة
ستة أخطاء يقع فيها الناس، وكيف تتجنب كل واحد.
لصق أمر بعلامات اقتباس مكسورة
احترس عندما تكون صدفة أو نافذة محادثة قد أزالت علامات الاقتباس الخارجية. ولأن علامة غير مغلقة تبتلع بقية السطر، افحص علامة الإغلاق قبل أن تلوم المحوّل.
ترك رمز حقيقي في المثال
لذلك استبدل رمز bearer حيًا بنص بديل قبل حفظ الملف. أيضًا، فالمحوّل يحفظ القيمة التي أعطيته، لذا يبقى الترتيب عليك.
الثقة بترويسة مقروءة من ملف
خيار -H @file يعني أن الترويسة تعيش على القرص. ولأن هذه الصفحة لا تستطيع فتح قرصك، تغيب الترويسة من الكود، وتقول الملاحظة ذلك.
نسيان أن إعادات التوجيه تختلف افتراضيًا
لذا لا يتبع curl إعادة توجيه دون -L. وتتبع عدة عملاء HTTP افتراضيًا، وهذا فرق يعضّ. ويسمّي اللوح الخيار الذي اتخذه الأمر.
لصق نص multipart وتوقع ملفًا حقيقيًا
لا تستطيع هذه الصفحة قراءة الملف الذي سميته. لذا يحمل النص نصًا بديلًا، وتضع المسار الحقيقي لاحقًا. ويمكن لمكتبتك أن تبني النموذج multipart بنفسها.
افتراض أن كل اللغات تقتبس بالطريقة نفسها
النص الذي يحمل فاصلة عليا يكسر نص PHP مهمل ونص Python مهمل في موضعين مختلفين. لذلك يهرب كل كاتب للغته، وتمر البنية على نسخ PHP بـ php -l.
أسئلة عن محوّل curl
هل محوّل curl هذا مجاني؟
نعم. لا حساب ولا حد ولا خطة مدفوعة. لذا تحوّل ما تشاء من الأوامر.
هل يرسل أمري إلى مكان ما؟
لا. بما أن القراءة والكتابة تعملان في متصفحك، لا يترك الأمر جهازك أبدًا. لذلك يبقى الطلب الذي يحمل رمزًا حيًا خاصًا.
هل ينفّذ الطلب؟
لا. يقرأ الأمر ويكتب الكود فقط. لذا لا شيء يذهب إلى العنوان في الأمر، وهذا ما يجعل لصق مضيف داخلي آمنًا.
ما اللغات التي يمكن أن يكتبها؟
ثلاث عشرة وجهة. في PHP هناك اثنتان: cURL العادي وعميل Guzzle. وPython يأخذ requests، وJavaScript يأخذ fetch وaxios ووحدة http في Node.js. وGo وRuby وJava وC# يأخذ كل منها واحدًا. الثلاثة الأخيرة هي HTTP خام وسطر curl نظيف وJSON.
هل يمكنه قراءة أمر منسوخ من devtools في Chrome أو Firefox؟
نعم. هذا هو الطريق الأساسي. بعدها يصل الأمر المنسوخ بعلامات اقتباسه وشرطاته المائلة العكسية، والقارئ يعالج الاثنتين.
وماذا عن أمر مكتوب في سطر واحد طويل جدًا؟
يقرأه بالطريقة نفسها. يعمل الفاصل على المسافات وعلامات الاقتباس لا على الأسطر. لذا سطر طويل وعشرون سطرًا قصيرًا يعطيان الطلب نفسه.
هل يفهم --data-raw و--data-binary و--data-urlencode؟
نعم، وكل منها يحفظ معناه. لذا تبقى الجزء المرمّز بـ urlencoded مرمّزًا، ويمر الجزء الثنائي كما هو.
ماذا يحدث مع رفع الملفات عبر -F؟
تبني الصفحة نص multipart بنفسها وترسله كبايتات خام. ولأنها لا تستطيع قراءة قرصك، يحمل جزء الملف نصًا بديلًا، وتقول الملاحظة أيّه.
هل يتبع إعادة التوجيه مثل curl؟
يطابق الأمر. لذا لا يتبع curl إعادة توجيه دون -L، والكود يتبع فقط إن فعل الأمر ذلك.
كيف يتعامل مع -u مستخدم:كلمة سر؟
يبني ترويسة Authorization بنفسه من الجزأين. وبالتالي يرسل الكود الناتج الترويسة Basic نفسها دون الحاجة إلى خيار curl.
لماذا يظهر خيار في ملاحظات القرار؟
لأن القارئ اضطر إلى الاختيار عنك أو إلى ترك شيء خارجًا. عندئذ تسمّي الملاحظة الخيار، لتفحصه يدويًا.
هل يمكنني تحويل أمر curl بلا عنوان؟
جزئيًا. عندئذ تقرأ الصفحة الخيارات وتُبلّغ عنها، لكن لا يوجد طلب لكتابته. وتطلب عنوانًا بدلًا من ذلك.
هل يمكنني تشغيل PHP الناتج كما هو؟
نعم. يفتح بالوسم، ويضبط الخيارات، وينفّذ ويغلق المقبض. كما يمر على php -l قبل أن تُنشر هذه الصفحة، فيصمد الاقتباس.
وماذا عن Python الناتج؟
يستورد requests، ويبني الترويسات، ويرسل النداء بالطريقة الصحيحة ويطبع الحالة والنص. لذا تلصقه في ملف وتشغّله.
لماذا يحتاج fetch إلى ضبط لإعادة التوجيه؟
لأن القيمة الافتراضية في المتصفح تختلف عن curl. لذا يسمّي الكود follow أو manual، وكلاهما يطابق ما طلبه الأمر.
هل يحفظ ترتيب الترويسات؟
نعم. يكتب الكود الترويسات بالترتيب الذي ظهرت به في الأمر. أيضًا، لذا يسهل قراءة فرق مقابل السطر الأصلي.
هل يمكنه قراءة ملف كوكيز؟
تُبلّغ الصفحة عن المسار، لكنها لا تفتح الملف. ولأن المتصفح لا يستطيع قراءة قرصك في صمت، فإنه لا يختلق أي ترويسة Cookie منه.
ماذا تفعل وجهة curl النظيف؟
تكتب الطلب نفسه مرة أخرى كسطر curl مرتب، بخيار واحد لكل سطر. لذا يمكنك لصقه في نص برمجي أو في تذكرة ورؤية كل جزء.
ما فائدة وجهة JSON؟
تطبع الطلب كبيانات. ثم تضعه في تجهيزة اختبار وتقارن ما يرسله كودك بما أرسله curl.
هل يتعامل مع --json؟
نعم. يضبط ذلك الخيار نوع المحتوى وترويسة accept معًا، ويعرض اللوح الاثنتين. وعندما يمتزج جزء نص عادي، تقول الصفحة إن التركيب غامض.
كم ترويسة يمكن أن يستوعب؟
المئات. القارئ مرور واحد على الكلمات. لذا يحوّل أمر بثلاث مئة ترويسة في اللحظة نفسها التي يحوّل فيها أمر بثلاث.
هل يعمل على الهاتف؟
نعم. تتراكم المربعات ويبقى المثال مقروءًا عند عرض ضيق. لذا يمكنك تحويل أمر وأنت بعيد عن المكتب.
هل يمكنني استخدام الناتج في مشروع تجاري؟
نعم. لا رخصة على الكود الناتج، لأن الكود الناتج ملكك، ولا أحد يطلب نسبته.
لماذا يحمل الكود تعليقًا أحيانًا؟
لأن اللغة الهدف فيها موضع يشرح نفسه. لذا يوضّح الكود خيارًا بمعنى مفاجئ حيث يجده قارئ الملف.
وإذا قرأ المحوّل خيارًا لم أره قط؟
تُبلّغ الصفحة عنه كخيار غير معروف وتتجاوزه. وفوق كل شيء، لا تختلق شيئًا مكانه، وهذا يحفظ بقية الطلب أمينة.
هل هناك واجهة برمجية؟
لا، ولا حاجة إليها، لأن العمل يحدث في متصفحك أصلًا. ولهذا أيضًا لا شيء يصل إلى سجل الخادم.
أدوات تجتمع مع هذه
أربع صفحات يفضي إليها العمل نفسه عادة.
منسّق JSON
ثم نسّق نص الطلب قبل لصقه في تجهيزة. ولأن حمولة من سطر واحد تخفي مفتاحًا فاسدًا، يجعل هذا الأمر ظاهرًا.
افتح الأداة ←مرمّز وفاكّ ترميز URL
افحص أيضًا قيمة استعلام مرّت عبر --data-urlencode. عندئذ ترى هل علامات النسبة صحيحة قبل أن يرفضها خادم.
افتح الأداة ←مرمّز وفاكّ ترميز كيانات HTML
بالنسبة إلى نص طلب يحمل ترميزًا، يعرض هذا ما سيقرأه الخادم فعلًا. لذا تكف علامة العطف المهرّبة عن كونها تخمينًا.
افتح الأداة ←مصغّر JavaScript
بعد لصق مثال fetch في مشروع، يصغّره هذا لبنية المتصفح. عندئذ يبقى الملف المُشحن صغيرًا.
افتح الأداة ←
حوّل أمر curl الآن
الصق الأمر، وافحص الطلب الذي يعود، وخذ الكود باللغة التي تحتاجها. كذلك، لا شيء يخرج من متصفحك، لذا يبقى الرمز لك. العمل كله لصقة واحدة.