من اختبار الطلب إلى كتابة الكود

تحويل curl إلى كود Python أو JavaScript أو PHP

انقل طلب API الذي اختبرته إلى تطبيقك. ألصق أمر curl، واختر لغة الإخراج، ثم راجع البيانات وملاحظات التشغيل قبل استخدام الكود.

curlكود الطلب
التحويل داخل المتصفح
01

ألصق طلب ⁦HTTP⁩ واحدًا مع الترويسات وجسم الطلب. تُدعَم علامات اقتباس ⁦POSIX⁩ واستكمال السطر بشرطة مائلة عكسية.

POSTexample.comعدد الترويسات: 3
02
async function main() {
  const response = await fetch("https://example.com/api/messages", {
    method: "POST",
    headers: [
      ["Authorization", "Bearer YOUR_TOKEN"],
      ["Content-Type", "application/json"],
      ["Accept", "application/json"]
    ],
    body: "{\"message\":\"Hello from curl\",\"enabled\":true}",
    redirect: "manual",
    credentials: "omit"
  });
  console.log(response.status);
  console.log(await response.text());
}

main().catch(console.error);

⁦Fetch⁩ في المتصفح أو ⁦Node.js 18+⁩

قبل التشغيل

  • لا يرسل المحوّل طلبًا. يتضمن الكود العنوان والترويسات وبيانات الاعتماد المدخلة؛ راجعه قبل المشاركة.
  • يخضع ⁦Fetch⁩ في المتصفح لقواعد ⁦CORS.⁩ لا تُرسَل ملفات ⁦Cookie⁩ تلقائيًا مع ⁦credentials: omit⁩؛ اضبط بيانات الاعتماد عند الحاجة. قد تعطي إعادة التوجيه اليدوية ردًا معتمًا.

بلا تسجيل أو تنفيذ أوامر. تُعالج المدخلات داخل متصفحك.

إعادة استخدام طلب API داخل التطبيق

قد تحصل على أمر curl من توثيق خدمة أو من أدوات المطوّر بعد تتبّع مشكلة. يحتفظ الأمر بعنوان الطلب وترويساته وبياناته، لكن إدخاله في التطبيق يتطلّب صياغة تناسب مكتبة اللغة. يجهّز المحوّل هذه الصياغة لتراجعها وتضيف إليها ما يحتاجه مشروعك، دون إرسال الطلب.

خطوات تحويل أمر curl

ألصق أمرًا واحدًا يبدأ بـ curl ويحتوي على عنوان HTTP أو HTTPS كامل. اختر اللغة، ثم راجع الطريقة والترويسات وجسم الطلب. يمكنك نسخ الناتج أو تنزيله في ملف. تتم المعالجة محليًا داخل المتصفح.

احتفظ بعلامات الاقتباس حول القيم التي تتضمن مسافات. عند النسخ من أدوات المطوّر، استخدم صيغة bash. استبدل متغيرات الصدفة واستبدالات الأوامر بقيم فعلية أولًا. لا يقرأ المحوّل الملفات ولا يحوّل رفع الملفات أو نماذج multipart تلقائيًا.

اختيار المكتبة بحسب بيئة التشغيل

يستخدم Python مكتبة Requests التي تُثبَّت بأمر pip install requests، ويرسل الجسم النصي كبايتات UTF-8. يحتاج PHP إلى امتداد cURL. أما JavaScript فيستخدم Fetch داخل المتصفح أو في إصدار Node.js يدعمه.

يُحفَظ نص JSON دون إعادة تسلسله، فلا يغيّر المحوّل الأرقام الكبيرة أو المسافات أو المفاتيح المكررة. لكنه لا يتحقق من صحة JSON. أضف مهلة الاتصال ومعالجة الأخطاء المناسبة لتطبيقك؛ وقد تستخدم Requests إعدادات الوكيل وملف .netrc من بيئة التشغيل.

لماذا ينجح curl ويفشل Fetch في المتصفح؟

يفرض المتصفح قواعد CORS ويتولى إدارة بعض الترويسات. تُحذَف هذه الترويسات من كود Fetch مع ذكر أسمائها في الملاحظات. يستخدم الكود credentials: omit، لذا لا يرسل ملفات تعريف الارتباط الخاصة بجلسة المتصفح تلقائيًا. إذا احتجت إلى ضبط هذه الحقول من الخادم، فراجع خيار Python أو PHP.

دون -L تكون إعادة التوجيه في Fetch يدوية وقد ينتج عنها رد معتم في المتصفح. عند تفعيل إعادة التوجيه، يعتمد تغيير طريقة الطلب وتمرير بيانات الاعتماد على المكتبة. راجع سلسلة التوجيه قبل تشغيل الكود.

الاحتفاظ بقيمتين لحقل نموذج واحد

يبقى الحقلان tag في جسم الطلب. يرمّز الخيار --data-urlencode المسافة، ثم يمرّر كود Python النص الناتج كما هو، بدل وضع القيم في قاموس قد يستبدل إحداها بالأخرى.

curl 'https://example.com/api/tags' --data-urlencode 'tag=cloud hosting' --data-urlencode 'tag=linux'
import requests

url = "https://example.com/api/tags"
headers = {
    "Content-Type": "application/x-www-form-urlencoded"
}
body = "tag=cloud%20hosting&tag=linux".encode("utf-8")

response = requests.request(
    method="POST",
    url=url,
    headers=headers,
    data=body,
    allow_redirects=False,
    verify=True,
)
print(response.status_code)
print(response.text)

كيف تُحوَّل خيارات curl؟

الخيارطريقة التعامل معه
URL / --urlعنوان HTTP أو HTTPS كامل واحد
-X / --requestطريقة HTTP المحددة صراحةً
-H / --headerالاسم والقيمة؛ التكرار والترويسات الفارغة يحتاجان إلى مراجعة
-d / --data / --data-raw / --data-binaryجسم مضمن في الأمر مع حفظ ترتيب معاملات البيانات
--data-urlencode / -Gترميز القيم؛ ينقل -G البيانات إلى سلسلة الاستعلام
--jsonحفظ نص JSON وإضافة ترويسات JSON الافتراضية
-u / --userمصادقة Basic بصيغة username:password
-L / -I / -kإعادة التوجيه وHEAD والتحقق من TLS؛ لا يدعم Fetch الخيار -k
-b / -A / -eتخضع Cookie وUser-Agent وReferer لقيود المتصفح
--compressed / -s / -S / -v / -iفك الضغط بمكتبة الإخراج؛ لا يُعاد إنتاج تنسيق الطرفية

أسئلة عن التحويل

هل يؤدي لصق الأمر إلى الاتصال بالخادم؟

لا. تُحلَّل المدخلات ويُولَّد الكود في المتصفح فقط. لا تُختبَر صلاحية العنوان أو بيانات الاعتماد. يُرسَل الطلب عند تشغيل الكود لاحقًا.

هل يمكن استخدام Copy as cURL من أدوات المطوّر؟

نعم، لطلب واحد بصياغة POSIX وخيارات مدعومة. اختر صيغة bash. إذا ظهر خيار غير مدعوم، راجع وظيفته قبل حذفه؛ لا يتجاهله المحوّل بصمت.

هل يحافظ التحويل على الأرقام الكبيرة في JSON؟

يحتفظ المحوّل بالجسم كنص، دون تحويل أرقامه إلى أرقام JavaScript أو إعادة كتابة مفاتيحه. الخيار --json لا يتحقق من صحة صياغة JSON.

لماذا لا تظهر كل الترويسات في Fetch؟

يتحكم المتصفح في بعض الترويسات، لذلك تُستبعَد ويُشار إليها في الملاحظات. أما Content-Length فتعيد مكتبة HTTP حسابه.

هل يمكن مشاركة الملف مباشرةً؟

قد يتضمن الملف رموز وصول أو كلمات مرور أو بيانات Cookie من الأمر الأصلي. راجعه قبل المشاركة، واضبط إدارة بيانات الاعتماد والمهل ومعالجة الأخطاء وفقًا لتطبيقك.

المراجع التقنية: curl · Requests · Fetch