ورود
سورس سافت bread crumb arrow icon وبلاگ bread crumb arrow icon نحوه استفاده از cURL در PHP

cURL در PHP: راهنمای کامل، از اصول اولیه تا ارسال JSON و آپلود فایل

برای پخش ویدیو کلیک کنید
مالک پست تعیین نشده
clock icon مدت زمان مطالعه: 9 دقیقه
comment icon 0 نظرات
1404/09/12

اولین باری که مجبور شدم با یک API خارجی در PHP ارتباط برقرار کنم هنوز PHP نسخه 5 بود و خیلی از چیزهای امروزی را نداشت. تنها ابزاری که واقعا به دادم رسید cURL بود. استفاده از cURL در PHP شاید در ظاهر ساده باشد اما وقتی وارد پروژه واقعی شوید متوجه می‌شوید که چقدر وجودش حیاتی است . با همین ابزار می‌توانید اطلاعات واکشی کنید یا فرم ارسال کنید یا فایل بفرستید و حتی رفتار مرورگر را شبیه سازی کنید. اگر قرار باشد فقط یک ابزار برای ارتباط با سرویس های خارجی انتخاب کنم قطعا همین است.

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

چرا استفاده از cURL در PHP اینقدر مهم است؟

توابع داخلی PHP مانند file_get_contents برای دریافت‌ ها کاربرد دارند، اما وقتی می‌ خواهیم آن را تنظیم کنیم، وضعیت را کنترل کنید یا تایم اوت را مشخص کنید، محدودیت‌های این روش‌ها را مشخص کنید. cURL مثل یک جعبه ابزار کامل است. هر چیزی که برای یک درخواست حرفه ای لازم دارید را در اختیارتان می‌گذارد. از تنظیم SSL گرفته تا تغییر روش درخواست و ارسال JSON. هر پروژه جدی در نهایت به این ابزار می‌رسد.

ساختار اصلی یک درخواست با استفاده از cURL در PHP

هسته کار همیشه یکسان است. یک جلسه آغاز می‌کنید چند گزینه روی آن اعمال می‌کنید درخواست را اجرا می‌کنید و کار را تمام می‌کنید. اگر تا امروز با cURL کار نکرده باشید کد زیر ساده ترین نمونه است.

$curl = curl_init();
curl_setopt($curl CURLOPT_URL "https://example.com");
$response = curl_exec($curl);
curl_close($curl);

در ظاهر ساده است اما همین چند خط در پروژه واقعی بارها و بارها کاربرد دارد.

ارسال درخواست GET و نکته ای که معمولا فراموش می شود

درخواست GET در بیشتر API ها برای دریافت داده است. یک نکته جالب این است که اگر CURLOPT_RETURNTRANSFER را تنظیم نکنید پاسخ مستقیم در خروجی چاپ می‌شود و این موضوع خیلی ها را به اشتباه می‌اندازد.

$curl = curl_init();
curl_setopt($curl CURLOPT_URL "https://api.example.com/post");
curl_setopt($curl CURLOPT_RETURNTRANSFER true);
$out = curl_exec($curl);
curl_close($curl);

در نسخه هایی از PHP که قبلا استفاده می‌کردم اگر این گزینه را نمی‌گذاشتم حتی نمی‌ فهمیدم API چه پاسخی داده است. پس این گزینه یکی از مهم ترین هاست.

ارسال داده با POST و رفتار متفاوت برخی API ها

ارسال داده با POST معمولا برای فرم ها یا ورود کاربر استفاده می‌شود. اما همه API ها یکسان نیستند. بعضی از API ها مقدار POSTFIELDS را فقط با ساختار فرم قبول می‌کنند.

$curl = curl_init();
curl_setopt($curl CURLOPT_URL "https://example.com/login");
curl_setopt($curl CURLOPT_POST true);
curl_setopt($curl CURLOPT_POSTFIELDS [
"user" => "demo"
"pass" => "1234"
]);
curl_setopt($curl CURLOPT_RETURNTRANSFER true);
$res = curl_exec($curl);
curl_close($curl);

در یکی از پروژه ها API مقصد فقط داده فرم را می‌پذیرفت و وقتی JSON می‌فرستادم درخواست را نادیده می‌گرفت. این اتفاق زیاد پیش می‌آید.

ارسال JSON با استفاده از cURL در PHP

امروزه اکثر سرویس ها با JSON کار می کنند. اگر هدر Content Type را تنظیم نکنید API درخواست شما را به عنوان فرم در نظر می‌گیرد و نتیجه اشتباه است .

$data = ["id" => 5 "title" => "hello"];
$json = json_encode($data);

$curl = curl_init();
curl_setopt($curl CURLOPT_URL "https://api.example.com/update");
curl_setopt($curl CURLOPT_POST true);
curl_setopt($curl CURLOPT_POSTFIELDS $json);
curl_setopt($curl CURLOPT_HTTPHEADER [
"Content-Type: application/json"
]);
curl_setopt($curl CURLOPT_RETURNTRANSFER true);
$out = curl_exec($curl);
curl_close($curl);

این بخش جایی است که خیلی ها خطا می‌گیرند و ساعت ها دنبال دلیل آن می‌گردند.

تجربه آپلود فایل از طریق cURL

آپلود فایل همیشه برای من چالش بوده اما cURL کار را راحت می‌کند. کافی است یک شی فایل بسازید و آن را ارسال کنید.

$f = curl_file_create("test.jpg");
$curl = curl_init();
curl_setopt($curl CURLOPT_URL "https://example.com/upload");
curl_setopt($curl CURLOPT_POST true);
curl_setopt($curl CURLOPT_POSTFIELDS ["photo" => $f]);
curl_setopt($curl CURLOPT_RETURNTRANSFER true);
$r = curl_exec($curl);
curl_close($curl);

در سرورهای قدیمی که PHP آپدیت نبود مجبور بودیم از روش @file استفاده کنیم که امروز دیگر پیشنهاد نمی‌شود.

چند نکته که فقط با تجربه متوجه آنها می‌شوید

گاهی API ها پاسخ دیر می‌دهند یا اتصال قطع می‌شود. اگر زمان انتظار مشخص نکنید اسکریپت شما برای مدت طولانی معلق می‌ماند.

curl_setopt($curl CURLOPT_TIMEOUT 12);

همچنین بهتر است خطاها را بررسی کنید چون بعضی خطاها در cURL ساکت هستند.

if(!$res){
$err = curl_error($curl);
}

خیلی از توسعه دهندگان این مرحله را فراموش می‌کنند و تشخیص مشکل سخت می‌شود.

1 ابزار جایگزین برای پروژه های پیچیده

اگر پروژه شما بزرگ است، Guzzle گزینه مناسبی است. Guzzle فقط کار را خواناتر و مدیریت درخواست ها را راحت تر می‌کند. برای پروژه های سبک نیازی به آن نیست اما برای سیستم های بزرگ باعث نظم بیشتر می‌شود .

نتیجه گیری

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

این مقاله چقدر برای شما مفید بود؟
0 امتیاز از 0 رای
tags
برچسب ها
questions
سوالات متداول

file_get_contents برای درخواست های ساده مناسب است اما امکان تنظیم هدر، تایم اوت و متدهای HTTP پیشرفته را ندارد. cURL انعطاف پذیرتر است و به شما امکان می دهد درخواست های GET، POST، PUT، DELETE را مدیریت کنید و با API های پیچیده تعامل داشته باشید.

برای ارسال JSON کافی است داده ها را با json_encode تبدیل کنید، گزینه CURLOPT_POSTFIELDS را روی رشته JSON قرار دهید و هدر Content-Type: application/json را تنظیم کنید. این روش به API ها اطلاع می دهد که داده ها در قالب JSON ارسال می شوند.

بله. برای آپلود فایل باید یک شی CURLFile ایجاد کنید و آن را به POSTFIELDS اضافه کنید. در PHP نسخه‌های قدیمی از روش @file استفاده می شد اما در نسخه های جدید بهتر است از curl_file_create استفاده کنید. همچنین هدر Content-Type به صورت multipart/form-data باید تنظیم شود.

دیدگاه و پرسش

هیچ نظری ثبت نشده است