ما هو Guzzle ولماذا تحتاجه؟
\n\nGuzzle هي مكتبة PHP قوية للعمل مع طلبات HTTP. توفر واجهة سهلة لإرسال طلبات HTTP، ومعالجة الردود، والعمل مع الكوكيز والجلسات والطلبات غير المتزامنة وغير ذلك الكثير. إذا كنت تعمل مع API، أو تقوم بتجميع صفحات الويب، أو ببساطة تتفاعل مع خوادم بعيدة، فإن Guzzle سيكون أداة لا غنى عنها لك.
\n\nالإمكانيات الرئيسية لـ Guzzle:
\n- \n
- دعم جميع طرق HTTP (GET، POST، PUT، DELETE، PATCH، HEAD، OPTIONS) \n
- العمل مع الرؤوس (headers)، جسم الطلب، معلمات URL \n
- دعم الطلبات غير المتزامنة (قائمة على Promise) \n
- معالجة تلقائية لإعادة التوجيه (redirects) \n
- العمل مع الكوكيز والجلسات \n
- Middleware لتوسيع الوظائف \n
- دعم PSR-7 (واجهات PSR-7 لرسائل HTTP) \n
- اختبار ومحاكاة بسيطة \n
يُستخدم Guzzle في مشاريع كبيرة مثل Laravel (عميل HTTP مدمج)، Drupal، Magento والعديد من المشاريع الأخرى.
\n\nالتثبيت
\n\nيتم تثبيت Guzzle عبر Composer - مدير الحزم لـ PHP. إذا لم يكن لديك Composer بعد، قم بتثبيته من الموقع الرسمي getcomposer.org.
\n\nنفّذ الأمر في الطرفية في جذر مشروعك:
\n\ncomposer require guzzlehttp/guzzle\n\nبعد التثبيت، قم بتضمين محمل Composer التلقائي في ملف PHP الخاص بك:
\n\nrequire 'vendor/autoload.php';\n\nالآن أنت جاهز للعمل مع Guzzle.
\n\nبداية سريعة
\n\nلنرسل طلب GET بسيط إلى API عام ونحصل على البيانات بتنسيق JSON.
\n\n<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Client;\n\n$client = new Client();\n$response = $client->get('https://jsonplaceholder.typicode.com/posts/1');\n\n// الحصول على جسم الرد\n$body = $response->getBody();\n\n// تحويل JSON إلى مصفوفة\n$data = json_decode($body, true);\n\necho "Title: " . $data['title'] . "\\n";\necho "Body: " . $data['body'] . "\\n";\n?>\n\nيوضح هذا المثال مدى سهولة الحصول على البيانات من خادم بعيد. يقوم Guzzle تلقائيًا بمعالجة الرؤوس ورموز الحالة وجسم الرد.
\n\nالطرق والوظائف الأساسية
\n\n1. get() — طلب GET
\nما يفعله: يرسل طلب HTTP GET إلى URL المحدد. يُستخدم للحصول على البيانات.
\nالمعلمات:
\n- \n
$uri(string) — URL الطلب \n $options(array) — مصفوفة من الخيارات (الرؤوس، معلمات query، مهلات، إلخ.) \n
مثال:
\n<?php\n$client = new GuzzleHttp\\Client();\n$response = $client->get('https://api.github.com/users/octocat', [\n 'headers' => [\n 'Accept' => 'application/json',\n 'User-Agent' => 'Guzzle-Demo'\n ],\n 'query' => [\n 'page' => 1,\n 'per_page' => 10\n ]\n]);\n\necho $response->getStatusCode(); // 200\necho $response->getBody();\n?>\n\n2. post() — طلب POST
\nما يفعله: يرسل طلب POST. يُستخدم لإنشاء موارد جديدة أو إرسال بيانات إلى الخادم.
\nالمعلمات:
\n- \n
$uri(string) — URL الطلب \n $options(array) — مصفوفة من الخيارات (body، form_params، json، multipart، إلخ.) \n
مثال:
\n<?php\n$client = new GuzzleHttp\\Client();\n$response = $client->post('https://jsonplaceholder.typicode.com/posts', [\n 'json' => [\n 'title' => 'منشور جديد',\n 'body' => 'محتوى المنشور',\n 'userId' => 1\n ]\n]);\n\necho $response->getStatusCode(); // 201\n$data = json_decode($response->getBody(), true);\nprint_r(