الأدوات
الأدلة

محول curl

تطوير

حوّل أمر curl إلى fetch وaxios وPython وGo وJava وHTTPie — مباشرة مع تبويبات متعددة اللغات.

100% من جهة العميل بدون خادم خلفي

لا يتم جلب الروابط البعيدة؛ الصق JSON مباشرة.

الإدخال
الصق أمر curl لعرض الشيفرة المحوّلة.
في هذه الصفحة

ما هو مُحوِّل curl؟#

curl أقرب ما يكون إلى لغة كونية لـ HTTP. كلّ لوحة DevTools في المتصفّح، وكلّ موقع توثيق واجهة برمجة تطبيقات، وكلّ تذكرة دعم، ينتهي بها الأمر لتُسلِّمك أمر curl — «النسخ كـ cURL» هي كيف ينتقل الطلب من متصفّح إلى تقرير ثغرة. المشكلة أنّ أمر curl ملصقًا نادرًا ما تستطيع تشغيله في قاعدة كودك فعلًا. خدمتك مكتوبة بـ Python، أوGo، أوfetch من جهة المتصفّح؛ لا تريد استدعاء curl كعملية خارجية، بل تريد النداء المكافئ بعميل HTTP الذي تستخدمه أصلًا.

تجسر هذه الصفحة تلك الفجوة. الصق أمر curl على اليسار، فتحلّل بنية الصدفة — الأعلام والاقتباسات واستمرار الأسطر والترويسات والجسد والمصادقة — إلى طلبٍ مهيكَل، ثمّ تُصدر الشيفرة المكافئة لستة أهداف دفرةً واحدة: fetch للمتصفّح، وaxios، وrequests في Python، وnet/http في Go، وHttpURLConnection في Java، وhttpie. تقرأ عبر التبويبات، فتنسخ ما يطابق حزمتك وتمضي.

يجري التحليل بالكامل في متصفّحك. الأمر الذي تلصقه لا يلامس خادمًا قط، وهذا يهمّ لأنّ أوامر curl الفعلية تحوي غالبًا رموز bearer أوبيانات مصادقة أساسية أوكعكات موقّعة.

كيفية الاستخدام#

  1. الصق أمر curl في لوحة الإدخال على اليسار. تستطيع لصق كلمة curl الافتتاحية أولإسقاطها؛ كلاهما يعمل. الأوامر متعدّدة الأسطر الموصلة بـ \ خلفيّ مفهومة، وكذلك الأوامر المنسوخة من طرفية يجلس فيها كلّ علمٍ على سطر.
  2. اضغط مثال لتحميل مثالٍ واقعي إن أردت رؤية الشكل أولًا، أومسح لمسح اللوحة.
  3. اختر لغة الهدف من شريط التبويبات فوق المخرَج: fetch أوaxios أوpython أوgo أوjava أوhttpie. تُولَّد الستة كلّها من التحليل نفسه، فتبديل التبويبات فوريّ — لا إعادة تشغيل.
  4. اقرأ الشيفرة المُولَّدة في اللوحة. استخدم نسخ في شريط التبويبات لأخذها.
  5. راقب شريط الحالة أسفل اللوحات. إن اصطدم المُحلِّل بعلمٍ لا يُنمذِجه (إعادة توجيه إلى ملفّ إخراج، إعداد وكيل)، يقول ذلك صراحةً بدل إسقاطه بصمت.

الميزات الرئيسية#

  • مُجزِّئ صدفة حقيقيّ، لا كشط regex. الاقتباسات المفردة والمزدوجة، واقتباس ANSI-C $'...' (مع إلغاءات \n و\t و\x41 وé)، واستمرار السطر بشرطة مائلة خلفية-سطر جديد، والفرق بين "a\b" و'a\b'، كلٌّ معالَج كما يفعل bash. المُحوِّلات الساذجة التي تقسم على الفراغات تنكسر لحظة تحوي قيمة ترويسة على مسافة.
  • ستة أهداف من تحليل واحد. ترى fetch وaxios وPython وGo وJava وhttpie جنبًا إلى جنب. وإن لم تدرِ هل تمدّ يدًا لـ fetch أمaxios، تقارن معالجتهما لترويسة المصادقة نفسها في نقرتَين.
  • ذكاء الجسد. حين يحمل الطلب Content-Type: application/json، يُمرِّر باعث Python الجسدَ ككلمة json= المفتاحية ليُرسَل جسدٌ على شكل dict بشكل صحيح؛ وإلّا يلجأ إلى data=.
  • المصادقة الأساسية تُفكّ مرّة. علم -u user:pass يصبح btoa("user:pass") في fetch، وكتلة auth في axios، وتوليفة auth= في requests، وSetBasicAuth في Go — كلّ اصطلاحٍ كما تتوقّعه تلك اللغة.
  • الأعلام المجهولة مُبلَّغة لا مبتلعة. يُسطَّر -o output.txt أو--proxy في شريط الحالة كـ unknown args، فلا تُضلَّ بصمتًا ظنًّا أنّ تحويلًا التقط إعادة توجيه أووكيلًا أسقطه فعلًا.
  • بلا خادم خلفيّ، بلا تسرّب. يُجزَّأ الأمر في الذاكرة بسكربت الصفحة نفسها. لا نداء شبكة يحمل رمزك الملصق إلى أيّ مكان.

مثال عملي#

حمِّل مثال (أوالصق مكافئ ما يُنتجه DevTools حين «تنسخ كـ cURL» لـ POST بصيغة JSON):

curl -X POST https://example.com/api/v1/users \
  -H 'Authorization: Bearer tok' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Alice","role":"admin"}'

بدّل إلى تبويب fetch فتحصل على:

const response = await fetch("https://example.com/api/v1/users", {
  method: "POST",
  headers: {
    "Authorization": "Bearer tok",
    "Content-Type": "application/json",
  },
  body: "{\"name\":\"Alice\",\"role\":\"admin\"}",
});

بدّل إلى تبويب python. ولأنّ Content-Type هو JSON، يمرّ الجسد عبر الكلمة المفتاحية json=:

import requests

url = 'https://example.com/api/v1/users'
headers = {
    'Authorization': 'Bearer tok',
    'Content-Type': 'application/json',
}
payload = '{"name":"Alice","role":"admin"}'
response = requests.request('POST', url, headers=headers, json=payload)
print(response.status_code)

الأمر نفسه متاح أيضًا فورًا تحت تبويبات go وjava وaxios وhttpie — ستة تحويلات بثمن لصقة واحدة.

الأسئلة الشائعة#

تقول «unknown args» لأمري. ما الذي أسقطته؟#

يُنمذِج المُحلِّل أعلام curl التي تستخدمها لوصف طلب — الطريقة وURL والترويسات والجسد والمصادقة الأساسية و--compressed و-k و-L. الأعلام التي تصف سلوك curl نفسه (مثل -o لكتابة الجسد إلى ملفّ، و--proxy، و--connect-timeout، و--cert) لا تُترجَم، لأنّه لا مكافئ لها في نداء fetch. تُجمَّع وتُعرض في شريط الحالة ليعلم أنّها أُسقطت عمدًا لا فُقدت.

هل أستطيع تحويل أمرٍ يستخدم اقتباس $'...' لـ ANSI-C؟#

نعم. تصل الترويسات والأجساد المنسوخة من الطرفيات أحيانًا مغلَّفة بـ $'...' كي تُفسَّر تسلسلات الإلغاء مثل \n أو\t بالصدفة. يفهم المُجزِّئ اقتباس ANSI-C ويُفكِّك \n و\t و\xHH و\uHHHH و\UHHHHHHHH والإلغاءات البسيطة، فتطابق البايتات التي يراها المُحوِّل ما كان سيُرسله curl.

لماذا يستخدم مخرَج Python أحيانًا json= وأحيانًا data=؟#

ينظر الباعث إلى ترويساتك. حين توجد Content-Type: application/json يُمرِّر الجسد عبر الكلمة المفتاحية json=، ممّا يتيح لـ requests ضبط الترويسة وترميز الحمولة بشكل صحيح. ولأيّ نوع محتوى آخر (مُرمَّز كنموذج، أونصّ خام، أوأجزاء متعدّدة) يلجأ إلى data=، لأنّ إجبار json= هناك سيكون خطأً.

هل يُرسل الطلب عنّي؟#

لا، وذلك متعمَّد. تُترجِم هذه الأداة الأمر إلى شيفرة فقط؛ ولا تُنفّذه قطّ. يجري المقطع المُولَّد في برنامجك أنت، تحت بيانات اعتمادك أنت، حيث تُفحصه قبل أن يفعل أيّ شيء حيًّا.