cURL چیست؟
cURL مخفف کلمه Client for URLs پروژه نرم افزاری است که یک کتابخانه و ابزار خط فرمان جهت انتقال داده ها با استفاده از پروتکل های مختلف و براساس URL را فراهم می کند. چیزی که cURL را قدرتمند می کند تعداد پروتکل هایی است که این کتابخانه از آنها پشتیبانی می کند که شامل FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, FILE و LDAP است. پروژه cURL دو محصول را تولید می کند libcurl و cURL
Daniel Stenberg این پروژه را در سال ۱۹۹۷ آغاز کرد و به وسیله آن انتقال فایل با پروتکل هایی مانند HTTP, FTP و غیره را بوسیله خط فرمان امکان ساخت.
cURL در PHP
کتابخانه cURL در نسخه ۴.۰.۲ PHP اضافه شد تا از طریق این کتابخانه بتواند اطلاعات را از طریق URL جا به جا کند. برای مثال با استفاده از cURL میتوانید اطلاعات یک وب سایت را بخوانید، به صورت خودکار لاگین کنید، در سایت های دیگر فایل آپلود کنید و خیلی کارهای دیگر. cURL بسته ای است به صورت Extension که برروی PHP نصب می گردد و قابلیت اتصال از طریق URL توسط متدهای GET,POST,… را برقرار می کند.
اما بعضی از این کارها را هم شاید بتوان با توابع خود PHP مانند file_get_contents انجام داد، اما ابتدا نیاز دارید که گزینه allow_url_fopen در فایل php.ini در سرور شما فعال باشد و از آن جایی که بیشتر سرورها برای افزایش امنیت این گزینه را غیر فعال می کنند تنها راه شما یادگیری و استفاده از cURL است.
1 |
<?file_put_contents('Filename.zip', file_get_contents('http://domain.ir/Filename.zip'));?> |
مثال از cURL
cURL به صورت پیش فرض بر روی Apache نصب نیست و اگر می خواهید از این کتابخانه بر روی localhost سیستم استفاده کنید ابتدا باید آن را فعال کنید. برای نحوه فعال سازی میتوانید از این مطلب استفاده کنید.
در یک مثال ساده ابتدا ما یک صفحه یک سایت را گرفته و نمایش می دهیم، با استفاده از کد زیر:
1 2 3 4 5 |
$ch = curl_init("http://www.google.com";); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $google = curl_exec($ch); echo $google; curl_close($ch); |
در خط ۱ ابتدا با استفاده از تابع curl_init یک دستگیره (Handle) از آدرس موردنظر میگیریم. سپس در خط ۲ با استفاده از تابع curl_setopt مشخص می کنیم که ما می خواهیم اطلاعات بازگشت داده شوند به جای این که نمایش داده شوند.
تابع curl_setopt برای اعمال تنظیماتی (Set Option) بر روی Session موردنظر است. در این مثال ما با استفاده از TRUE کردن مقدار CURLOPT_RETURNTRANSFER به cURL می گوییم که قصد نمایش اطلاعات را نداریم. می توانید تمامی Optionها را در PHP Manual ببینید. از سایت php.net قابل دسترسی است.
در خط ۳ با استفاده از تابع curl_exec دستورات را اجرا می کنیم، و در خط ۵ با تابع curl_close سشن موردنظر را میبندیم.
در خط ۴ برای دیدن این که واقعا چه رخ داده است دستور echo را انجام داده ایم، حالا می توانید آن چیزی که از سایت مورد نظر لازم دارید استخراج کنید.
اگر دستورات بالا را اجرا کنید خواهید دید که سایت مورد نظر نمایش داده می شود.
اما این یک مثال ساده بود، مثال بالا را می توانید با تابع file_get_contents هم انجام دهید.
قدرت cURL در تابع curl_setopt است، با استفاده از این تابع چیزی که دقیقا میخواهید را می توانید پیاده سازی کنید.
در یک مثال دیگر در نظر بگیرید صفحه ای از سایتی (page2.php) را که در صورتی برای شما باز خواهد شد که شما از یک صفحه خاص (page1.php) به آن متصل شده باشید.
در واقع page2.php چک میکند که مقدار HTTP_REFERER شما صفحه page1.php باشد. خوب اگر قرار باشد که ما صفحه page2.php را باز کنیم باید مقدار HTTP_REFERER را برابر page1.php قرار دهیم. که برای اینکار باز هم از تابع curl_setopt استفاده می کنیم.
1 2 3 4 5 |
$ch = curl_init("http://example.com/page2.php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_REFERER, "http://exapmle.com/page1.php"); $page = curl_exec($ch); curl_close($ch); |