إعادة استخدام طلب 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 من الأمر الأصلي. راجعه قبل المشاركة، واضبط إدارة بيانات الاعتماد والمهل ومعالجة الأخطاء وفقًا لتطبيقك.
