ما هي أجزاء طلب HTTP؟
طلب HTTP هو طريقة (GET أو POST أو PUT أو PATCH أو DELETE …) وعنوان URL مستهدف — المسار مع معاملات الاستعلام — تليهما ترويسات، ولطرق حمل البيانات جسمٌ تسمّي ترويسة Content-Type صيغته. يعرّف RFC 9110 الطرق ودلالاتها: GET وHEAD آمنتان، وPUT وDELETE متكافئتان، وPOST ليست هذه ولا تلك، وهذا ما يقرر إن كان يجوز إعادة إرسال الطلب. وسطر أوامر cURL هو الطلب نفسه مكتوباً، وهو اللغة المشتركة لإعادة إنتاج استدعاء API في تقرير عيب.
اقرأ الدليل: ما هو اختبار API؟ وكيف تختبر REST API
كيفية استخدام محلّل أوامر cURL
- الصق أمر cURL (يقبل الأوامر متعددة الأسطر).
- اختر اللغة الهدف.
- أزل الترويسات الخاصة بالمتصفح إن أردت، ثم انسخ الكود المحوَّل أو بنية JSON.
مزايا محلّل أوامر cURL
- مقسّم رموز (tokenizer) يراعي قواعد غلاف الأوامر (shell): علامات الاقتباس المفردة والمزدوجة وANSI-C، والأحرف المهرَّبة، واستمرار الأسطر بالشرطة المائلة العكسية وbacktick و^
- يتعرّف على -X و-H و-d/--data-raw/--data-binary/--data-urlencode و--json و-F و-u و--oauth2-bearer و--url و-A و-e و-b و-L و--compressed و-k و-I و-G و--max-time والعلامات المدمجة وصيغة --flag=value
- يستنتج الطريقة (POST عند وجود متن، وHEAD مع -I)، ويفكّ ترميز بيانات اعتماد Basic، ويستخرج رموز Bearer ومفاتيح API
- يحوّل إلى ثلاثة عشر هدفاً منها fetch وaxios وPython وJava وC# وGo وPHP وRuby
- خيار لإزالة الترويسات الخاصة بالمتصفح من تصديرات أدوات المطوّرين
- عرض JSON منظّم للطلب وقائمة بالعلامات المتجاهَلة
مثال على محلّل أوامر cURL
تحويل تصدير من أدوات المطوّرين إلى fetch
الإدخال:
curl 'https://api.example.com/v1/orders' -H 'authorization: Bearer eyJ…' -H 'content-type: application/json' --data-raw '{"sku":"KB-100"}' --compressedالنتيجة:
const response = await fetch("https://api.example.com/v1/orders", {
method: "POST",
headers: {
"Authorization": "Bearer eyJ…",
"content-type": "application/json"
},
body: JSON.stringify({
"sku": "KB-100"
})
});الأسئلة الشائعة حول محلّل أوامر cURL
ما علامات cURL المفهومة؟
-X/--request و-H/--header و-d/--data/--data-raw/--data-binary/--data-urlencode و--json و-F/--form و-u/--user و--oauth2-bearer و--url و-A و-e و-b و-L و--compressed و-k و-I و-G و-m/--max-time، والعلامات القصيرة المدمجة (-sSL)، وصيغة --flag=value، والاقتباس $'…'، واستمرار الأسطر في bash وPowerShell وcmd. وتُدرج العلامات غير المعروفة بوصفها متجاهَلة.
لماذا تكون الطريقة POST مع أن الأمر لا يحتوي على -X؟
هذه قاعدة curl نفسه: أي خيار -d أو -F يعني ضمناً POST ما لم يُحدَّد -G (إرسال البيانات كاستعلام) أو -X صراحةً. ويعني -I ضمناً HEAD.
ما الذي يزيله خيار «إزالة الترويسات الخاصة بالمتصفح»؟
الترويسات التي تضيفها المتصفحات تلقائياً والتي تعطّل الطلبات البرمجية أو تضخّمها: sec-ch-* وsec-fetch-* وuser-agent وcookie وreferer وorigin وaccept-language وaccept-encoding وpriority وcache-control وpragma. ويُحتفظ دائماً بـ Authorization وContent-Type.
هل يُفكّ ترميز ترويسة Authorization من نوع Basic؟
نعم. يُفكّ ترميز "Authorization: Basic …" من base64 إلى اسم مستخدم وكلمة مرور حتى يتمكن الكود المحوَّل من استخدام خيار المصادقة الأصلي في العميل؛ كما يُتعرَّف على رموز Bearer وترويسات X-API-Key.
المراجع
- RFC 9110: HTTP Semanticsمعاني أساليب HTTP وحقول الترويسات ورموز الحالة والتفاوض على المحتوى، بغضّ النظر عن إصدار البروتوكول.
- HTTP headers — MDNمرجع لترويسات الطلب والاستجابة: الصياغة والتوجيهات ودعم المتصفحات.
- RFC 7578: Returning Values from Forms: multipart/form-dataترميز multipart/form-data المستخدم لرفع الملفات وإرسال النماذج المختلطة.