تحويل Postman إلى Curl في PHP: تشريح التحويل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

سحر النقرة الواحدة: كيف يتحول Postman إلى Curl؟

\n\n

كل من عمل مع API يعرف هذا الموقف: لقد أعددت طلبًا مثاليًا في Postman، كل شيء يعمل كالساعة، ثم تحتاج إلى نقل هذا الطلب إلى زميل أو تضمينه في سكريبت PHP. تضغط على "Code" ← تختار cURL ← وتحصل على الأمر الجاهز. سحر؟ لا، إنها رياضيات بحتة وتحليل.

\n\n

ولكن ماذا لو كنت بحاجة إلى أتمتة هذه العملية؟ أو كتابة محول خاص بك يحول وصف الطلب بصيغة JSON إلى أمر curl قابل للتنفيذ؟ اليوم سنلقي نظرة تحت غطاء هذه الآلية ونكتب دالة PHP تفعل نفس الشيء الذي يفعله Postman - ولكن بأيدينا.

\n\n

هذه المادة ستكون مفيدة ليس فقط لمطوري الواجهة الخلفية، ولكن لكل من يريد فهمًا أعمق لكيفية عمل طلبات HTTP وكيفية تحويلها من تنسيق إلى آخر. هيا بنا!

\n\n

ما هو "Postman to Curl" في الحقيقة؟

\n\n

عندما تضغط على زر التصدير في Postman، يقوم البرنامج بشيء بسيط ولكنه مهم: فهو يأخذ وصفًا منظمًا للطلب (الطريقة، URL، الرؤوس، الجسم) ويترجمه إلى صيغة سطر الأوامر.

\n\n

في جوهره، هذا هو تحويل الطلب من تمثيل إلى آخر. يخزن Postman الطلبات في نموذج JSON الداخلي الخاص به. عندما تختار cURL، يقوم بالتكرار عبر هذا النموذج ويجمع سطرًا مثل:

\n\n
curl --request POST \\\n  --url https://api.example.com/data \\\n  --header 'Content-Type: application/json' \\\n  --data '{"key":"value"}'
\n\n

كل شيء عبقري بسيط. لكن دعنا نحلل كيف يعمل هذا على مستوى الكود.

\n\n

إنشاء المحول الخاص بنا في PHP

\n\n

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

\n\n

الخطوة 1: تحديد هيكل البيانات المدخلة

\n\n

للبساطة، سنتفق على أننا سنستقبل مصفوفة تحتوي على المفاتيح: method و url و headers (مصفوفة ترابطية) و body (سلسلة نصية أو مصفوفة). هذا هو النموذج الأدنى الذي يستخدمه Postman.

\n\n
<?php\n\n$request = [\n    'method'  => 'POST',\n    'url'     => 'https://api.example.com/users',\n    'headers' => [\n        'Content-Type' => 'application/json',\n        'Authorization' => 'Bearer token123'\n    ],\n    'body'    => json_encode(['name' => 'John', 'email' => 'john@example.com'])\n];
\n\n

الخطوة 2: كتابة دالة التجميع

\n\n

المنطق الأساسي: نأخذ الطريقة، URL، الرؤوس، الجسم - ونلصقهم معًا في أمر واحد. انتبه إلى هروب علامات الاقتباس والأحرف الخاصة.

\n\n
function generateCurlCommand(array $request): string {\n    $parts = ['curl'];\n\n    // 1. الطريقة (إذا لم تكن GET)\n    if (strtoupper($request['method']) !== 'GET') {\n        $parts[] = '--request ' . strtoupper($request['method']);\n    }\n\n    // 2. URL\n    $parts[] = '--url ' . escapeshellarg($request['url']);\n\n    // 3. الرؤوس\n    foreach ($request['headers'] as $key => $value) {\n        $parts[] = '--header ' . escapeshellarg($key . ': ' . $value);\n    }\n\n    // 4. جسم الطلب\n    if (!empty($request['body'])) {\n        $parts[] = '--data ' . escapeshellarg($request['body']);\n    }\n\n    return implode(" \\\\\\n  ", $parts);\n}
\n\n

دالة escapeshellarg هي أفضل صديق لك. تقوم بهروب علامات الاقتباس بشكل صحيح، مما يمنع كسر الأمر واحتمالية حدوث ثغرات.

\n\n

تحليل تحت الغطاء: ماذا يفعل Postman في الحقيقة

\n\n

الآن بعد أن أصبح لدينا كود عملي، دعنا نحلل بالضبط كيف يعالج Postman (والمحول الخاص بنا) كل عنصر من عناصر الطلب.

\n\n

1. طريقة HTTP

\n

يتحقق Postman مما إذا كانت الطريقة تختلف عن GET. إذا كانت مختلفة، يضيف العلم --request. لماذا ليس لـ GET؟ لأن cURL يقوم افتراضيًا بطلب GET إذا لم يتم تحديد خلاف ذلك. ذك

المدونات

توصيات الكتب