عميل HTTP لـ PHP: أفضل المكتبات للعمل مع الطلبات

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

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

ابدأ الدورة

عميل HTTP لـ PHP: أفضل المكتبات للعمل مع الطلبات



نادرًا ما تخلو تطوير PHP الحديثة من إرسال طلبات HTTP: التكامل مع واجهات API الخارجية، تحليل صفحات الويب، التحقق من توفر الخدمات. الأدوات المدمجة في PHP (مثل file_get_contents() أو cURL) غالبًا ما تكون غير مرنة أو مريحة بما فيه الكفاية. لحسن الحظ، يقدم نظام PHP البيئي مكتبات عملاء قوية تبسط العمل مع HTTP. في هذه المقالة، سنستعرض أفضل مكتبات عملاء HTTP لـ PHP، وميزاتها وأمثلة استخدامها.



1. Guzzle — المعيار الفعلي



Guzzle هي المكتبة الأكثر شيوعًا للعمل مع HTTP في PHP. مثبتة في ملايين المشاريع، بما في ذلك Laravel و Drupal و Symfony. توفر Guzzle واجهة نظيفة موجهة للكائنات، وتدعم الطلبات غير المتزامنة، والوسائط الوسيطة (middleware)، ومجموعات الاتصالات، و PSR-18 (عميل HTTP).



التثبيت

composer require guzzlehttp/guzzle


مثال: طلب GET مع معالجة الرد

<?phprequire 'vendor/autoload.php';

use GuzzleHttp\\Client;

$client = new Client([ 'base_uri' => 'https://api.github.com/', 'timeout' => 5.0,]);

$response = $client->request('GET', 'users/octocat');

echo $response->getStatusCode(); // 200$body = json_decode($response->getBody(), true);echo $body['login']; // octocat?>


طلب غير متزامن

<?php$promise = $client->getAsync('https://httpbin.org/delay/1');$promise->then(    function ($response) {        echo 'تم: ' . $response->getStatusCode();    },    function ($exception) {        echo 'خطأ: ' . $exception->getMessage();    });$promise->wait(); // يجب استدعاؤها للتنفيذ?>


الإيجابيات: مجتمع ضخم، مرونة، وسائط وسيطة للتسجيل/التخزين المؤقت، دعم كامل لـ PSR-7/PSR-18.



2. Symfony HttpClient — سريع وحديث



مكون Symfony HttpClient ظهر في Symfony 4.4 وسرعان ما اكتسب شعبية بفضل الأداء العالي، والدعم المدمج لتعدد الإرسال (HTTP/2)، والتكامل الممتاز مع Symfony. كما أنه متوافق مع PSR-18.



التثبيت

composer require symfony/http-client


مثال: طلبات متوازية

<?phprequire 'vendor/autoload.php';

use Symfony\\Component\\HttpClient\\HttpClient;

$client = HttpClient::create();

$responses = [];$urls = [ 'https://api.github.com/users/octocat', 'https://api.github.com/users/nonexistent',];

foreach ($urls as $url) { $responses[] = $client->request('GET', $url);}

foreach ($responses as $response) { // طريقة getContent() تنتظر الرد تلقائيًا echo $response->getStatusCode() . ' - ' . $response->getContent(false) . "";}?>


استخدام متقدم: إعادة المحاولة والتخزين المؤقت

<?phpuse Symfony\\Component\\HttpClient\\RetryableHttpClient;use Symfony\\Component\\HttpClient\\HttpClient;

$client = new RetryableHttpClient( HttpClient::create(['timeout' => 2.0]), maxRetries: 3);

$response = $client->request('GET', 'https://example.com');echo $response->getContent();?>


الإيجابيات: سرعة عالية، آلية إعادة محاولة مدمجة، دعم HTTP/2 push، استهلاك منخفض للذاكرة.



3. cURL (إضافة PHP) — كلاسيكي



إضافة cURL — حل مدمج في PHP يعمل مباشرة مع libcurl. لا يتطلب تثبيت مكتبات خارجية، لكن الكود يكون منخفض المستوى. مناسب للمهام البسيطة أو عندما لا يمكن استخدام Composer.



مثال: طلب POST بسيط

<?php$ch = curl_init('https://httpbin.org/post');curl_setopt_array($ch, [    CURLOP                    

توصيات