PDA

View Full Version : آموزش: آشنایی با توابع cURL و چند مثال کاربردی



صابر طهماسبی
چهارشنبه 16 تیر 1389, 23:35 عصر
به نام خدا
تصمیم دارم طی چند مقاله در حد اطلاعات خودم در مورد curl بنویسم امیدوارم مورد استفاده ی دوستان قرار گیرد.
لازم به ذکر است این مطالب را بنده بعضا ترجمه می کنم و با کمی دخل و تصرف اینجا قرار می دهم.
از دوستان خواهشمندم موارد زیر را در نظز داشته باشند :


برای نظم تاپیک از ارسال موارد غیر ضروری خودداری کنید.
برای تشکر فقط از کلید تشکر استفاده کنید
در صورتی که مطلب مفیدی در این زمینه دارید لطفا دریغ ننمایید

صابر طهماسبی
چهارشنبه 16 تیر 1389, 23:36 عصر
قسمت اول
با استفاده از cURL می توان با سرورهای مختلف و از طریق پروتکل های متفاوت ارتباط بر قرار کرد و کارهای مشابه کارهای زیر را انجام داد:


نوشتن ماژولهای پرداخت آنلاین و ارتباط با درگاه های پرداخت
دانلود و آپلود فایل از سرورهای دیگر
لاگین کردن به بخش کاربری سایتها

در زیر چند تابع پر کاربرد این کتابخانه ی قدرتمند را مرور می کنیم :



curl_init : آماده سازی یک نشست curl و برگشت دادن یک handle برای پاس دادن به دیگر توابع کاربردی curl
curl_opt : این تابع موتور اصلی این کتابخانه می باشد و در طول کدنویسی و کار با این کتابخانه بارها مورد استفاده قرار می گیرد و با تغییر پارامترهای ان می توان کارهای زیادی انجام داد.
curl_exec : این تابع نشست(session) آماده شده را شروع می کند
curl_close : نشست(session) را به پایان می رساند و ارتباط را قطع می کند


خوب فعلا برای شروع کافی است، یک مثال را با هم بررسی می کنیم در مثال زیر یک فایل را از یک سرور بر روی هاست خود با استفاده از curl دانلود می کنیم(برای مثال RSS همین بخش پی اچ پی سایت برنامه نویس را دانلود می کنیم):





<?php
/**
* Initialize the cURL session
*/
$ch = curl_init();
/**
* Set the URL of the page or file to download.
*/
curl_setopt($ch, CURLOPT_URL,
'http://www.barnamenevis.org/forum/external.php?type=RSS2&forumids=30');
/**
* Ask cURL to return the contents in a variable
* instead of simply echoing them to the browser.
*/
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
/**
* Execute the cURL session
*/
$contents = curl_exec ($ch);
/**
* Close cURL session
*/
curl_close ($ch);
?>
همونطور که دیدید curl_setopt محور اصلی کار ما بود. فرآیند کار با توابع این کتابخانه از طریق تغییر پارامترهای این تابع مهم کنترل می شود.
در کد بالا از دو پارامتر این تابع استفاده کردیم :


CURLOPT_URL : آدرس url ای است که می خواهیم آن را پردازش کنیم این پردازش می تواند دانلود یک فایل و یا ارسال اطلاعات به آن url باشد
CURLOPT_RETURNTRANSFER : اگر مقدار این آپشن را برابر 0 قرار دهیم تابع curl_exec نتیجه را در مرورگر نمایش می دهد.(برای دیدن مقادیر دیگر به راهنمای PHP مراجعه کنید گرچه سعی بنده براین است که با مثالهای متعدد آنها را شرح دهم)

صابر طهماسبی
پنج شنبه 17 تیر 1389, 07:39 صبح
قسمت دوم
دانلود یک صفحه وب و ذخیره ی آن در یک فایل
در مثال زیر همون آدرس قبلی (RSS بخش PHP سایت برنامه نویس) را دانلود کرده و در یک فایل ذخیره می کنیم:



<?php
/**
* Initialize the cURL session
*/
$ch = curl_init();
/**
* Set the URL of the page or file to download.
*/
curl_setopt($ch, CURLOPT_URL,
'http://www.barnamenevis.org/forum/external.php?type=RSS2&forumids=30');
/**
* Create a new file
*/
$fp = fopen('barnamenevisRSS.xml', 'w');
/**
* Ask cURL to write the contents to a file
*/
curl_setopt($ch, CURLOPT_FILE, $fp);
/**
* Execute the cURL session
*/
curl_exec ($ch);
/**
* Close cURL session and file
*/
curl_close ($ch);
fclose($fp);
?>


در این مثال از یکی دیگر از تنظیمات cURL به نام CURLOPT_FILE استفاده کردیم،این آپشن یک اشاره گر به فایل(file handler) را نگهداری می کند که نتیجه ی curl_exec در آن ذخیره می شود.
در مثال بعد نحوه ی submit کردن فرمها را با استفاده از cURL امتحان خواهیم کرد انشاءالله

صابر طهماسبی
پنج شنبه 17 تیر 1389, 16:03 عصر
قسمت سوم

در این بخش می خواهییم نحوه ی ارسال اطلاعات و کاربا فرم های سرور های دیگر را از طریق cURL یاد بگیریم.
برای submit کردن فرم ها از طریق cURL باید مراحل زیر را طی کنیم :


آماده سازی داده ها برای ارسال
اتصال به URL پردازشگر داده ها
ارسال اطلاعات
دریافت جواب و نمایش آن به کاربر

اسکریپتی را که در این قسمت می خواهیم بررسی کنیم می توانید از ضمیمه دانلود کنید.

1) آماده سازی داده ها برای ارسال
همانطور که میدانید فرمها داده ها را در قالبی به شکل"field1=field1_value&field2=field2_value&field3=field3_value" ارسال می کنند و این حالت در هنگامی که متد فرم GET باشد مشهود است.

filed1 , filed2 , ... نمایانگر فیلدها ی فرم و field1_value و ... نمایانگر مقادیر آنها هستند.
مرورگر قبل از اینکه داده های فرم را ارسال کند آنها را urlencode می کند برای کسب اطلاعات بیشتر در مورد urlencode به آدرس زیر مراجعه کنید:
http://php.net/manual/en/function.urlencode.php
نتیجه می گیریم ما هم چون در حال شبیه سازی عملیات ارسال داده های یک فرم هستیم باید داده ها را به این صورت درآوریم برای اینکار php تابعی به نام urlencode دارد.به مثال زیر توجه کنید:



<?php
$post_str = '';
foreach($data as $key=>$val) {
$post_str .= $key.'='.urlencode($val).'&';
}
$post_str = substr($post_str, 0, -1);
?>
در کد بالا داده ها را به شکل اینکد شده در می آوریم تا بتوانیم آنها را با استفاده از cURL ارسال کنیم.

2) اتصال به URL مورد نظر

در قسمت قبل این آموزش نحوه ی اتصال را بررسی کردیم حال فقط کد اتصال را می نویسم:



<?
php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com/form-handler.php' );
?>

3) ارسال(submit) داده ها

ابتدا بهcURL اعلام می کنیم که می خواهیم با متد POST داده ارسال کنیم :




<?php
curl_setopt($ch, CURLOPT_POST, TRUE);
?>






سپس داده هایی(فیلدهایی) را که می خواهیم ارسال کنیم به cURL تحویل می دهیم:




<?php
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str);
?>

در نهایت با استفاده از curl_exec داده ها را ارسال کرده و پاسخ را دریافت می کنیم و نمایش می دهیم(البته ممکن است شما با regular expression داده ها را دستکاری و یا چک کنید سپس پسغام دلخواه را به کاربر نمایش دهید) :



<?
php
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>



منبع این سه مقاله : phpsense.com
موفق باشید.

صابر طهماسبی
جمعه 18 تیر 1389, 09:53 صبح
قسمت چهارم - کار با Cookie ها در cURL

سلام
در این قسمت می خوایم با یه مثال پذیرش Cookie ها را در cURL بررسی کنیم
فرض کنید سایت مورد نظر که می خواهیم با آن کار کنیم یک صفحه به نام cookiepage.php دارد که چک می کند که آیا cookie لازم برای سایت set شده است یا نه و پاسخ لازم را ارسال می کند.
خوب حالا کد :




<?php
/* STEP 1. let’s create a cookie file */
$ckfile = tempnam ("/tmp", "CURLCOOKIE");

/* STEP 2. visit the homepage to set the cookie properly */
$ch = curl_init ("http://somedomain.com/");
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec ($ch);

/* STEP 3. visit cookiepage.php */
$ch = curl_init ("http://somedomain.com/cookiepage.php");
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec ($ch);

/* here you can do whatever you want with $output */
?>
توضیحات :


STEP 1 . یک کوکی موقت برای ذخیره سازی کوکی دریافتی با استفاده از تابع tempnam ایجاد می کنیم
STEP 2 . به homepage متصل شده و کوکی های ارسالی از طرف آن را دریافت و در کوکی موقتی که ساختیم ذخیره می کنیم. اگر به کد توجه کنید بازهم تابع همه کاره ی این کتابخانه به شکل
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); به کار می رود.می توانید برای اطلاعات بیشتر عبارت CURLOPT_COOKIEJAR را در راهنمای PHP جستجو کنید.
STEP 3 . در این مرحله صفحه ی cookiepage.php را لود کرده و کوکی را که ذخیره کرده ایم به آن تحویل می دهیم.اینجا هم نکته ای اصلی دستور
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile); می باشد.

موفق باشید.
منبع : coderscult.com

صابر طهماسبی
شنبه 19 تیر 1389, 14:24 عصر
قسمت پنجم : آپلود فایل به سرور دیگر با استفاده از cURL
اگر قسمت های قبلی را دنبال کرده باشید به نگاه به کد زیر همه چیز را متوجه می شوید:
کاربرد پارامترهای جدید را می توانید به راحتی از PHP Manual بدست آورید.




<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
// same as <input type="file" name="file_box">
$post = array(
"file_box"=>"@/path/to/myfile.jpg",
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
?>

tarantino
شنبه 13 شهریور 1389, 03:14 صبح
نوشتن ماژولهای پرداخت آنلاین و ارتباط با درگاه های پرداخت
چطور ميتونيم با اين تابع يك صفحه جديد باز كنم و پارامترهاي مورد نظرم رو به اون صفحه بفرستم مثلا من 3 پارامتر دارم كه مي خام بفرستم صفحه پرداخت بانك سامان و ميخام كه اين كار با باز شدن صفحه پرداخت بانك سامان صورت بگيره ... ممنون ميشم توضيح بدي..

vimax65
چهارشنبه 12 آبان 1389, 20:58 عصر
سلام چه جوری می تونم.اطلاعات موجود روی یک صفحه که قبلا توسط سرور خونده شده رو روی صفحه ی شخصیه خودم بیارم؟

binyaft
چهارشنبه 12 آبان 1389, 21:17 عصر
منظورتون اینه که صفحه یک سایت رو بخونید؟؟؟

funpatogh
چهارشنبه 12 آبان 1389, 22:02 عصر
چطور ميتونيم با اين تابع يك صفحه جديد باز كنم و پارامترهاي مورد نظرم رو به اون صفحه بفرستم مثلا من 3 پارامتر دارم كه مي خام بفرستم صفحه پرداخت بانك سامان و ميخام كه اين كار با باز شدن صفحه پرداخت بانك سامان صورت بگيره ... ممنون ميشم توضيح بدي..
قسمت سوم آموزش توی همین صفحه برای کار شما کافیست

roya2002_80
چهارشنبه 19 مرداد 1390, 12:51 عصر
سلام
من می خوام از CURL برای نوشتن وب سرویس استفاده کنم ،
چون می خوام یک وب سرویسی بنویسم که عملیات درج داشته باشه ،و یک نفر گفت که برای امنیت بیشتر باید از CURL استفاده کنی ، کسی می تونه بهم کمک کنه ؟ می نمی دونم از کجا باید شروع کنم

Metal Gear Solid
چهارشنبه 19 مرداد 1390, 14:51 عصر
آقایون با این روشه که میشه مثلاً از این سایت اطلاعاتی رو توی سایتی مثل فیسBooo0k ارسال (share) کرد؟

hercool
شنبه 26 شهریور 1390, 19:01 عصر
دوستان من نتونستم از قسمت سوم استفاده کنم حتی خود کد ها هم اجرا نمیشه دستکاری هم کردم نشد ممنون میمش یکی از دوستان راهنماییم کنه و یک کد اجرا شده بزاره

hercool
پنج شنبه 07 مهر 1390, 10:30 صبح
از بین دوستان کسی نیست راهنمایی کنه؟

MSN_Issue
پنج شنبه 05 آبان 1390, 22:02 عصر
ممکنه این افزونه روی سرور شما فعال نباشه ...
تابع phpinfo() رو روی سرور ران کنید و عبارت curl رو توش سرچ کنید
ببینید enable هست یا نه ...

kaveh0918
پنج شنبه 02 آذر 1391, 02:46 صبح
چطور می تونم محتویات صفحه رو با curl به صورت یه تابع دربیارم؟
من می خوام با preg_replace در صفحه تغییرات ایجاد کنم ولی نمی تونم.
کدی که من دارم اینه ولی کار نمی کنه.


<?php

// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://google.com/search?q=". $_GET[q]);
curl_setopt($ch, CURLOPT_HEADER, false);
$nnn = curl_exec($ch);

$patterns = array();
$patterns[0] = '/google/';
$replacements = array();
$replacements[0] = '222';
echo preg_replace($patterns, $replacements, $nnn);

// grab URL and pass it to the browser
curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

?>


طبق این باید هر وقت مقدار q رو به صفحه بفرستم در گوگل سرچ کنه و تمام کلمات "google" رو به "222" تبدیل کنه ولی نمیشه باید چه تغییراتی بدم که کار کنه؟

morudi
چهارشنبه 18 اردیبهشت 1392, 15:13 عصر
چه طور میشه یه کوکی رو با استفاده از curl ها ارسال کنیم به جای دریافت

hasanak852
چهارشنبه 27 شهریور 1392, 23:48 عصر
چه طور میشه یه کوکی رو با استفاده از curl ها ارسال کنیم به جای دریافت


curl_setopt($ch, CURLOPT_COOKIE, 'fruit=apple; colour=red');

دوتا کوکی میوه و رنگ رو میفرسته.

hasanak852
چهارشنبه 27 شهریور 1392, 23:53 عصر
چطور می تونم محتویات صفحه رو با curl به صورت یه تابع دربیارم؟
یعنی چی تابع؟
منظورتو واضحتر بگو

من می خوام با preg_replace در صفحه تغییرات ایجاد کنم ولی نمی تونم.
طبق این باید هر وقت مقدار q رو به صفحه بفرستم در گوگل سرچ کنه و تمام کلمات "google" رو به "222" تبدیل کنه ولی نمیشه باید چه تغییراتی بدم که کار کنه؟
شما ببین برنامت اصلا مقداری رو میگیره، بعد به فکر ریپلیس باش.
برای این ریپلیس های ساده هم بهتره از تابع str_replace استفاده کنی

hasanak852
پنج شنبه 28 شهریور 1392, 00:17 صبح
قسمت ششم : استفاده از کورل برای سایتهای HTTPS-SSL/TLS
خیلی از سایتهایی که استفاده میکنیم، مثل گوگل و فیسبوک و ... از پروتکلهای امن یا همون https استفاده میکنند
برای استفاده از کورل برای سایتهای امن دو روش وجود داره. روش ساده ترش اینه که پارامتر CURLOPT_SSL_VERIFYPEER رو false تنظیم کنید.
مثال:


<?php
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => 'https://www.nic.ir/Login',
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HEADER => 0
)
);
$result = curl_exec($ch);
curl_close ($ch);
?>

sr008h
چهارشنبه 20 فروردین 1393, 00:16 صبح
سلام دوستان من میخواستم بدونم ایا با این تابع (curl)میشه به صورت اتوماتیک در سایت تون (barnamenevis.org)به حساب کاربری خودم ورود شم ؟

sr008h
پنج شنبه 21 فروردین 1393, 00:55 صبح
کسی نمیتونه کمک کنه ؟

منظورم اینه که چه جوری میشه یک فرم را توی یک صفحه تشخیص داد و ان رو پر کرد واتوماتیک دکمه ثبت رو زد ؟(با php)


ایا با curl میشه این کارو کرد ؟

ممنون میشم اگه جوابم رو بدید :-s

olampiad
چهارشنبه 01 مرداد 1393, 18:07 عصر
سلام و خسته نباشید
من تو اینجا میخوام از لحاظ الگوریتمی کمکم کنید.و روش هارو معرفی کنید

به این کد ی نگا بندازید


<?php
$ch = curl_init("http://www.worldskillsportal.com/index.php?option=com_content&task=view&id=3296&personnel_id=17078&UCP=yes");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);
$result = curl_exec($ch);

?>


کد بالایی رو در سیستم خودتان یک بار اجرا کنید
به این تصویر هم ی نگا بندازید.
http://s5.picofile.com/file/8131549684/redfgvds.PNG
میبینید که در این تصویر لینک هایی وجود دارد.
من چگونه میتوانم ب محتوای ابن لینک ها دسترسی داشته باشم.
آیا باید حتما محتوارو در یک فایل ذخیره کنم و بعد دنبال تگ a گشته و آدرس url بدست آمده را دوباره با استفاده از curl دنبال کنم؟
ممنون

Rezakakaei
جمعه 10 بهمن 1393, 20:22 عصر
سلام و خسته نباشید من ی صفحه داخل سایت خودم دارم میخوام اطلاعات ی سایت دیگه را داخلش بیارم با ابدیت اون اینجا هم عوض بشه
http://www.iranmercedes.com/getcar.php
این صفحه سایت منه ولی توجه کنید استایل کامل بهم خورده چیزای اضافی اون وب سایت هم وارد سایت من شده مثل تبلیغاتش این چیزا
<?php
/**
* Initialize the cURL session
*/
$ch = curl_init();
/**
* Set the URL of the page or file to download.
*/
curl_setopt($ch, CURLOPT_URL,
'http://www.iranjib.ir/showgroup/45/%D9%82%DB%8C%D9%85%D8%AA-%D8%AE%D9%88%D8%AF%D8%B1%D9%88-%D8%AA%D9%88%D9%84%DB%8C%D8%AF-%D8%AF%D8%A7%D8%AE%D9%84/');
/**
* Ask cURL to return the contents in a variable
* instead of simply echoing them to the browser.
*/
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
/**
* Execute the cURL session
*/
$contents = curl_exec ($ch);
/**
* Close cURL session
*/
curl_close ($ch);
?>





من از این استفاده کردم
ادرس سایت مبدا هم http://www.iranjib.ir/showgroup/45/ اینه

ممنون میشم کمکم کنید

saeed6363
جمعه 18 اردیبهشت 1394, 16:50 عصر
یلام من از این بخش هیچ استفاده ای نکردم

wahid22
سه شنبه 09 شهریور 1395, 12:15 عصر
من یه صفحه ای دارم که تا دیروز اطلاعات ازش گرفته میشد با curl ام تست کردم گرفته نمیشه الان میتونید کمک کنید هزینه درست کردنشم میدم
فایل رو ارسال کنم ادد کنید لطفا
ممنون

wahid22
سه شنبه 09 شهریور 1395, 14:29 عصر
کسی نیست؟ لطفا هست بگه

d68715
دوشنبه 15 شهریور 1395, 09:43 صبح
آموزش استفاده ارسال کوکی در هدر با استفاده از CURL

به مثال زیر توجه کنید :




$curl = curl_init();

$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 30";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Pragma: ";

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)');
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com');
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_COOKIEFILE, "/tmp/cookieFileName");
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($curl, CURLOPT_COOKIEJAR, '1.txt');
curl_setopt ($curl, CURLOPT_COOKIEFILE, '1.txt');

$html = curl_exec($curl);
curl_close($curl);



در فایل تکسک کوکی ها نوشه میشوند . (http://shaha.ir/?p=135)



طراحی سایت در ارومیه (http://payasite.ir/urmia)
طراحی سایت در تبریز (http://payasite.ir/tabriz)

pepsiphone
شنبه 20 مرداد 1397, 23:35 عصر
اینجا نحوه کار با کامند لاین curl رو توضیح داده
پرکاربردترین دستورات curl در یک صفحه (http://bestical.rocks/curl-cheatsheet/)

IKHATAMI
سه شنبه 13 آبان 1399, 12:08 عصر
سلام
یک مشکلی دارم در این تاپیک زده ام لطفا جواب بدهید
ممنون
https://barnamenevis.org/showthread.php?563136-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-curl-%D8%AF%D8%B1-php