سورس سافت | سورس پروژه | دانلود پروژه | سورس کد


م
ن
و
سورس سافت

ادامه مطلب

نحوه استفاده از cURL در PHP



نحوه استفاده از cURL در PHP

امروز، ما قصد داریم پسوند cURL را در PHP بررسی کنیم، که به شما امکان می ده درخواست های HTTP را از کد خود انجام بدین. تا آخر آموزش نحوه استفاده از cURL در PHP همراه ما باشید.

اغلب شما باید در توسعه PHP روزانه خود با وب سایت های خارجی ارتباط برقرار کنین. خواه برای فراخوانی برنامه های کاربردی REST شخص ثالث برای واکشی داده ها یا بارگیری منابع از یک وب سایت خارجی، یک کتابخانه می خواهید که به شما امکان می ده این کار را بدون هیچ موردی انجام بدین.

آموزش استفاده از cURL در PHP

در PHP، روش های متفاوتی وجود دارد که می تونین برای اتصال و ارتباط با انواع مختلف سرورها استفاده کنین. یکی از ساده ترین راه ها، استفاده از تابع file_get_contents برای خواندن فایل های از راه دوره. همچنین شما می توانین از سوکت برای پیاده سازی ارتباط سرویس گیرنده و سرور استفاده کنید. با این حال، در این مقاله، ما قصد داریم در مورد افزونه cURL به تفصیل، با مثال های دنیای واقعی بحث کنیم.

cURL مخفف URL های مشتری است و یک کتابخانه است که به شما امکان می ده اطلاعات را با نحو URL ارسال و دریافت کنین. در واقع، از کتابخانه libcurl، ایجاد شده توسط Daniel Stenberg استفاده می کنه که به شما امکان می ده با انواع مختلف پروتکل ها به انواع مختلف سرورها متصل شده و با آن ها ارتباط برقرار کنین. به غیر از HTTP و HTTPS، کتابخانه libcurl همچنین از پروتکل هایی مانند FTP ،Gopher ،Telnet ،DICT ،File و LDAP پشتیبانی می کنه.

از این جا به بعد، ما چند نمونه از دنیای واقعی را مرور می کنیم تا نشان بدیم که شما چگونه می تونین از توابع cURL در PHP استفاده کنین.

 

مثال های واقعی

در این بخش، ما مثال های واقعی را برای نشان دادن توابع مختلف cURL در PHP می سازیم.

 

نحوه بارگیری فایل ها با استفاده از cURL در PHP

خواندن یا بارگیری فایل های راه دور یکی از رایج ترین موارد استفاده برای cURL است. این امر با درخواست cURL GET انجام میشه، که ما در این بخش به آن خواهیم پرداخت.

پیش بروید و فایل curl_read_file.php را با محتویات زیر ایجاد کنید.

<?php
$url = 'https://www.example.com';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
$data = curl_exec($curl);
curl_close($curl);

در مثال بالا، ما از توابع cURL برای خواندن صفحه اصلی دامنه example.com استفاده کرده ایم. بیایید بخش های مهم را مرور کنیم تا نحوه عملکرد آن را درک کنیم.

در مرحله اول، ما از تابع curl_init برای راه اندازی یک جلسه جدید cURL استفاده کرده ایم. متغیر $ curlHandle دارای یک دسته cURL است که می توانیم از آن برای تنظیم گزینه های مختلف انتقال cURL با استفاده از تابع curl_setopt استفاده کنیم.

هنگامی که با cURL کار می کنین، تابع curl_setopt چیزیه که بیشتر با اون سر و کار دارین، زیرا به شما امکان می ده تا گزینه های مختلف درخواست CURLOPT_* را راه اندازی کنین. تابع curl_setopt سه آرگومان دارد: دسته cURL، گزینه CURLOPT_XXX و مقدار گزینه CURLOPT_XXX.

در مرحله بعد، ما از گزینه CURLOPT_URL برای تنظیم URL درخواست به example.com با عملکرد curl_setopt استفاده کرده ایم. به علاوه، ما گزینه CURLOPT_RETURNTRANSFER را روی TRUE قرار داده ایم. زیرا می خواهیم پاسخ را در متغیر $ respondData اولیه کنیم. اگر آن را روی TRUE تنظیم نکنیم، پاسخ مستقیماً روی صفحه نمایش داده میشه. در نهایت، ما گزینه CURLOPT_HEADER را روی FALSE قرار داده ایم تا اطلاعات سرصفحه در خروجی را رد کنیم.

در نهایت، ما از تابع curl_exec برای اجرای درخواست cURL استفاده کرده ایم. اگر همه چیز خوب پیش بره، متغیر $ respondData باید حاوی منبع صفحه اصلی example.com باشد.

 

نحوه ارسال اطلاعات با استفاده از cURL در PHP

در این قسمت نحوه ارسال داده ها با cURL را خواهیم دید.

بیایید فایل curl_post_example.php را با محتویات زیر ایجاد کنیم.

<?php
$url = '{POST_REST_ENDPOINT}';
$curl = curl_init();
$fields = array(
    'field_name_1' => 'Value 1',
    'field_name_2' => 'Value 2',
    'field_name_3' => 'Value 3'
);
$fields_string = http_build_query($fields);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);
$data = curl_exec($curl);
curl_close($curl);

در مثال بالا، فرض می کنیم که باید یک درخواست با روش HTTP POST ارسال کنیم. در واقع، مشابه ارسال فرم با روش POST عمل می کنه.

متغیر field $ دارای آرایه ای از مقادیر است که باید به عنوان داده POST ارسال کنیم. در مرحله بعد، ما از تابع http_build_query برای آماده سازی یک رشته پرس و جو با URL استفاده کرده ایم.

در مرحله بعد، ما گزینه CURLOPT_POST را روی TRUE قرار داده ایم تا روش درخواست را روی HTTP POST تنظیم کنیم. علاوه بر این، ما باید از گزینه CURLOPT_POSTFIELDS برای تنظیم داده های POST که می خواهیم همراه با درخواست ارسال کنیم، استفاده کنیم.

در نهایت، ما از تابع curl_exec برای اجرای درخواست cURL استفاده کرده ایم. به این ترتیب، می توانید یک درخواست cURL POST ایجاد کنین.

 

نحوه ارسال داده های JSON با استفاده از cURL در PHP

بیشتر اوقات، شما باید داده های JSON را در یک درخواست cURL POST ارسال کنین. در این بخش، خواهیم دید که چگونه می تونین داده های JSON را با روش POST در یک درخواست cURL ارسال کنین.

از آن جا که این یک درخواست POST است، بیایید نمونه ای را که در قسمت قبل مورد بحث قرار داده ایم، تجدید نظر کنیم. فایل curl_post_json.php را با محتویات زیر ایجاد کنین.

<?php
$url = '{POST_REST_ENDPOINT}';
$curl = curl_init();
$fields = array(
    'field_name_1' => 'Value 1',
    'field_name_2' => 'Value 2',
    'field_name_3' => 'Value 3'
);
$json_string = json_encode($fields);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_string);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true );
$data = curl_exec($curl);
curl_close($curl);

 

اگر چه ممکنه این مثال، شبیه به مثال قسمت قبل باشد، اما نکته مهم این است که ما از تابع json_encode برای ایجاد یک رشته JSON از آرایه $ field استفاده کرده ایم.

در مرحله بعد، ما از گزینه CURLOPT_HTTPHEADER برای تنظیم سربرگ Content-Type روی application/json استفاده کردیم تا به سرور API اطلاع بدیم که داده های JSON را ارسال می کنیم. سربرگ Content-Type برای ارسال داده در قالب های مختلف مفیده. به عنوان مثال، اگر می خواین داده های XML را ارسال کنید، باید سربرگ Content-Type را بر روی application/xml تنظیم کنین.

به جز آن، تقریباً مشابه درخواست POST معمولی است. بنابراین به این ترتیب، می تونین انواع مختلفی از داده ها را با تنظیم سرصفحه مناسب Content-Type ارسال کنین. اگه سربرگ Content-Type را تنظیم نکنین، از برنامه/x-www-form-urlencoded به عنوان مقدار پیش فرض استفاده می کنه.

 

نحوه بارگذاری فایل ها با استفاده از cURL در PHP

در این بخش، نحوه بارگذاری فایل ها با cURL را مورد بحث قرار می دهیم.

فایل curl_post_file.php را با محتویات زیر ایجاد می کنیم.

<?php
$url = '{POST_REST_ENDPOINT}';
$curl = curl_init();
if (function_exists('curl_file_create')) {
  $fileAttachment = curl_file_create('/absolute/path/to/file/');
} else {
  $fileAttachment = '@' . realpath('/absolute/path/to/file/');
}
$fields = array(
    'field_name_1' => 'Value 1',
    'field_name_2' => 'Value 2',
    'field_name_3' => 'Value 3',
    'uploaded_file' => $fileAttachment
);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
$data = curl_exec($curl);
curl_close($curl);

هنگامی که می خواین یک فایل را بارگذاری کنین، باید در وهله اول یک شی CURLFile ایجاد کنین. ایجاد اون با PHP 5.5+ بسیار آسونه، زیرا فقط باید از تابع curl_file_create برای ایجاد یک شی CURLFile استفاده کنین. اولین آرگومان تابع curl_file_create مسیر مطلق فایلی است که می خواین بارگذاری کنین.

اگر هنوز از نسخه PHP قدیمی استفاده می کنین، که توصیه نمیشه. ما از “@” جایگزین استفاده کرده ایم. به فرم realpath (‘/absolute/path/to/file/’) برای ایجاد پیوند فایل.

سرانجام، ما سربرگ Content-Type را روی داده های چند بخشی/ فرم داده تنظیم کرده ایم، زیرا یک درخواست POST چند قسمتی است. غیر از آن، این یک درخواست معمول cURL POST است.

تاکنون، ما چندین روش مختلف cURL را که اغلب در PHP استفاده میشه، مرور کرده ایم. در بخش بعدی، نحوه استفاده از کتابخانه Guzzle را می بینیم، که وقتی با درخواست های HTTP در PHP سروکار دارین، کار را برای شما آسان می کنه.

 

سرویس Guzzle HTTP چیست؟

طبق مستندات رسمی:

Guzzle یک سرویس گیرنده PHP HTTP است که ارسال درخواست های HTTP را آسان می کند و برای ادغام با سرویس های وب ناچیز است.

بیایید مزایای استفاده از Guzzle را بر روی توابع cURL PHP بررسی کنیم:

  • یک رابط کاربری ساده برای انواع مختلف داده ها
  • هر دو درخواست همزمان و ناهمزمان را پشتیبانی می کند
  • از cURL، سوکت ها و جریان های PHP پشتیبانی می کند
  • سازگار با PSR-7
  • و بیشتر

در مجموع، این یکی از بهترین کتابخانه هایی هستش که می خواین هنگام تماس با HTTP با روش های مختلف داشته باشین. در این بخش، ما نحوه نصب Guzzle را مورد بحث قرار میدیم، و چند مثال برای نشان دادن قدرت این کتابخانه ارائه میدیم!

 

نحوه نصب کتابخانه Guzzle

پیشنهاد مستندات رسمی اینه که از Composer برای نصب Guzzle استفاده کنین. دستور زیر رو برای نصب Guzzle در پروژه مون اجرا می کنیم.

$composer require guzzlehttp/guzzle:^7.0
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 6 installs, 0 updates, 0 removals
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing psr/http-client (1.0.1): Loading from cache
  - Installing ralouphie/getallheaders (3.0.3): Loading from cache
  - Installing guzzlehttp/psr7 (1.7.0): Loading from cache
  - Installing guzzlehttp/promises (1.4.1): Loading from cache
  - Installing guzzlehttp/guzzle (7.2.0): Loading from cache
guzzlehttp/psr7 suggests installing laminas/laminas-httphandlerrunner (Emit PSR-7 responses)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
Writing lock file
Generating autoload files

پس از نصب، باید به بارگیری خودکار Composer نیاز داشته باشین، همان طور که در قطعه زیر نشان داده شده:

require 'vendor/autoload.php';

و با این کار، شما آماده استفاده از Guzzle هستین!

 

نحوه درخواست GET با Guzzle

در این بخش می بینیم که چگونه می تونین درخواست های GET را با Guzzle ارسال کنین.

ما مثالی که قبلاً مورد بحث قرار دادیم رو، تجدید نظر می کنیم؛ زیرا به شما کمک می کنه تا بفهمین چگونه می تونین کد cURL PHP رو به پیاده سازی مبتنی بر Guzzle تبدیل کنین.

نگاهی به نمونه ویرایش شده بندازیم:

<?php
require 'vendor/autoload.php';
$client = new \GuzzleHttp\Client();
$response = $client->get('https://example.com');
$responseContents = $response->getBody();

 

ما یک نمونه از کلاس \ GuzzleHttp \ Client ایجاد کرده ایم و به متغیر $ client اختصاص داده شده  و اکنون، شما به بسیاری از روش های مفید ارائه شده توسط کلاس \ GuzzleHttp \ Client دسترسی دارین.

الان باید محتوا رو با روش GET واکشی کنیم، بنابراین از متد get کلاس \ GuzzleHttp \ Client استفاده کرده ایم و شیء GuzzleHttp \ Psr7 \ Response را برمی گردونه. شیء GuzzleHttp \ Psr7 \ Response روش های مختلفی مانند getStatusCode ،getBody ،getReasonPhrase و موارد دیگر را ارائه میده. ما از روش getBody برای واکشی محتویات بدن پاسخ استفاده کرده ایم.

بنابراین می تونین درخواست های HTTP GET را با Guzzle انجام بدین.

 

چگونه می توان یک درخواست ارسال با Guzzle انجام داد

در این بخش، نحوه انجام درخواست های HTTP POST با Guzzle را خواهیم دید.

ما مثال curl_post_example.php را که در بخش قبل به آن اشاره کردیم، بازبینی می کنیم. کد اصلاح شده با Guzzle به این صورت هستش:

<?php
require 'vendor/autoload.php';
$client = new \GuzzleHttp\Client();
$options = [
    'form_params' => [
        "field_name_1" => "Value 1",
        "field_name_2" => "Value 2",
        "field_name_3" => "Value 3",
    ]
];
$response = $client->post("{POST_REST_ENDPOINT}", $options);
$responseContents = $response->getBody();
?>

از اون جایی که این یک درخواست POST است، باید آرایه $ options را به عنوان دومین آرگومان، ارسال کنیم. مثال ما، شامل داده های فرمی هستش که باید به عنوان داده های POST ارسال کنیم.

در مورد نحوه ارسال اطلاعات JSON، فقط باید کلید form_params را به json تغییر بدین و داده ها به صورت JSON ارسال میشن!

همچنین، اگر می خواین سربرگ HTTP را به همراه یک درخواست ارسال کنین، می تونین این کار را با کلید headers انجام بدین، همون طوری که در قطعه کد زیر نشان داده شده:

...
...
$headers = array(
    'Content-Type'   => 'application/json'
);
$options = [
    'form_params' => [
            "field_name_1" => "Value 1",
            "field_name_2" => "Value 2",
            "field_name_3" => "Value 3",
    ],
    ‘headers’ => $headers
];
...
...

کتابخانه Guzzle موارد پیکربندی زیادی برای هر روش ارائه میده. همچنین، چندین روش برای انجام یک کار وجود داره، بنابراین شما را تشویق می کنم که اونو با جزئیات بررسی کنین و مطمئنم که واستون جالب خواهد بود!

بنابراین این یک معرفی سریع برای کتابخونه Guzzle، همراه با توابع PHP cURL بود.

 

نتیجه گیری

امروز، ما اصول اولیه cURL را در PHP بررسی کردیم. ما در مورد نحوه انجام انواع مختلف درخواست های HTTP با cURL در PHP بحث کردیم. همچنین، به معرفی سریع کتابخانه Guzzle پرداختیم که زندگی را برای توسعه دهندگان هنگام برخورد با درخواست های HTTP در PHP آسون می کنه.


لینک کوتاه مطلب :
https://sourcesoft.ir/?p=3754

برچسب‌ها :

درباره نویسنده

طاهره رنجبر 11 نوشته در سورس سافت دارد . مشاهده تمام نوشته های

دیدگاه ها


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

logo-samandehi