cURL هي أداة تستخدم بناء جملة URL لنقل الملفات والبيانات، وهي تدعم العديد من البروتوكولات، مثل HTTP وFTP وTELNET وما إلى ذلك. أفضل شيء هو أن php يدعم أيضًا مكتبة cURL. ستقدم هذه المقالة بعض الميزات المتقدمة لـ cURL وكيفية استخدامها في PHP.
لماذا استخدام الضفيرة؟
نعم، يمكننا الحصول على محتوى الويب من خلال طرق أخرى. في أغلب الأحيان، لأنني أريد أن أكون كسولًا، أستخدم فقط وظيفة php بسيطة:
$content = file_get_contents(" http://www.bizhicool.com ");
// أو
$lines = file(" http://www.bizhicool.com ");
// أو
readfile( http://www.bizhicool.com ); ومع ذلك، يفتقر هذا الأسلوب إلى المرونة والفعالية في معالجة الأخطاء. علاوة على ذلك، لا يمكنك استخدامه لإكمال بعض المهام الصعبة - مثل التعامل مع ملفات تعريف الارتباط، والتحقق من الصحة، وإرسال النموذج، وتحميل الملفات، وما إلى ذلك.
cURL هي مكتبة قوية تدعم العديد من البروتوكولات والخيارات المختلفة، ويمكنها تقديم تفاصيل متنوعة تتعلق بطلبات URL.
البنية الأساسية قبل التعرف على الوظائف الأكثر تعقيدًا، دعنا نلقي نظرة على الخطوات الأساسية لإعداد طلب cURL في PHP:
التهيئة، وتعيين المتغيرات، وتنفيذ النتائج والحصول عليها، وتحرير مقبض URL
// 1. التهيئة
$ch = curl_init();
// 2. قم بتعيين الخيارات، بما في ذلك عنوان URL
curl_setopt($ch, CURLOPT_URL, " http://www.bizhicool.com ");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 3. تنفيذ والحصول على محتوى مستند HTML
$output = curl_exec($ch);
// 4. حرر مقبض الضفيرة
curl_Close($ch); الخطوة الثانية (أي، curl_setopt()) هي الأكثر أهمية، وكل الغموض يكمن هنا. توجد قائمة طويلة من معلمات cURL التي يمكن تعيينها والتي تحدد تفاصيل مختلفة لطلب URL. قد يكون من الصعب قراءتها وفهمها جميعًا مرة واحدة، لذلك سنجرب اليوم فقط الخيارات الأكثر شيوعًا وإفادة.
التحقق من الأخطاء يمكنك إضافة عبارة للتحقق من الأخطاء (على الرغم من أن هذا غير مطلوب):
// ...
$output = curl_exec($ch);
إذا (الإخراج === خطأ) {
صدى "خطأ في URL:" curl_error($ch);
}
// ...يرجى ملاحظة أننا نستخدم "=== FALSE" بدلاً من "== FALSE" عند المقارنة. لأنه يتعين علينا التمييز بين المخرجات الفارغة والقيمة المنطقية FALSE، وهو الخطأ الحقيقي.
الحصول على المعلومات هذا إعداد اختياري آخر يمكنه الحصول على معلومات حول هذا الطلب بعد تنفيذ cURL:
// ...
curl_exec($ch);
$info = curl_getinfo($ch);
echo 'احصل على'.$info['url'] 'يستهلك الوقت'.
// ...يتضمن المصفوفة التي تم إرجاعها المعلومات التالية:
"url" // عنوان شبكة الموارد
"content_type" // ترميز المحتوى
"http_code" //رمز حالة HTTP
"header_size" // حجم الرأس
"request_size" // حجم الطلب
"filetime" // وقت إنشاء الملف
"ssl_verify_result" // نتيجة التحقق من طبقة المقابس الآمنة (SSL).
"redirect_count" // تقنية القفز
"total_time" // إجمالي الوقت المستغرق
"namelookup_time" // وقت استعلام DNS
"connect_time" // في انتظار وقت الاتصال
"pretransfer_time" // وقت التحضير قبل الإرسال
"size_upload" // حجم البيانات التي تم تحميلها
"size_download" // حجم البيانات التي تم تنزيلها
"speed_download" // سرعة التنزيل
"speed_upload" // سرعة التحميل
"download_content_length" // طول محتوى التنزيل
"upload_content_length" // طول المحتوى الذي تم تحميله
"starttransfer_time" // حان وقت بدء النقل
"redirect_time" // تستغرق إعادة التوجيه وقتًا إعادة التوجيه المستندة إلى المتصفح في المثال الأول، سنوفر جزءًا من التعليمات البرمجية التي تكتشف ما إذا كان الخادم لديه إعادة توجيه مستندة إلى المتصفح. على سبيل المثال، تقوم بعض مواقع الويب بإعادة توجيه صفحات الويب بناءً على ما إذا كان متصفح الهاتف المحمول أو حتى البلد الذي ينتمي إليه المستخدم.
نحن نستخدم خيار CURLOPT_HTTPHEADER لتعيين رؤوس طلب HTTP التي نرسلها (رؤوس http)، بما في ذلك معلومات وكيل المستخدم واللغة الافتراضية. ثم سنرى ما إذا كانت مواقع الويب المحددة هذه تعيد توجيهنا إلى عناوين URL مختلفة.
// عنوان URL للاختبار
عناوين URL $ = صفيف (
" http://www.cnn.com "،
" http://www.mozilla.com "،
" http://www.facebook.com "
);
// معلومات المتصفح للاختبار
متصفحات $ = صفيف (
"قياسي" => مصفوفة (
"user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)"،
"language" => "en-us,en;q=0.5"
)،
"iphone" => مصفوفة (
"user_agent" => "Mozilla/5.0 (iPhone; U; وحدة المعالجة المركزية مثل Mac OS X; en) AppleWebKit/420+ (KHTML، مثل Gecko) الإصدار/3.0 Mobile/1A537a Safari/419.3"،
"اللغة" => "ar"
)،
"الفرنسية" => المصفوفة (
"user_agent" => "Mozilla/4.0 (متوافق؛ MSIE 7.0؛ Windows NT 5.1؛ GTB6؛ .NET CLR 2.0.50727)"،
"اللغة" => "الاب,الأب-FR;q=0.5"
)
);
foreach ($url كـ $url) {
صدى "URL: $urln";
foreach ($المتصفحات كـ $test_name => $browser) {
$ch = curl_init();
//تعيين عنوان url
curl_setopt($ch, CURLOPT_URL, $url);
// قم بتعيين الرؤوس الخاصة بالمتصفح
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"وكيل المستخدم: {$browser['user_agent']}"،
"لغة القبول: {$browser['language']}"
));
// لسنا بحاجة إلى محتوى الصفحة
curl_setopt($ch, CURLOPT_NOBODY, 1);
// فقط قم بإرجاع رأس HTTP
curl_setopt($ch, CURLOPT_HEADER, 1);
// قم بإرجاع النتيجة بدلاً من طباعتها
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
تجعيد_إغلاق($ch);
// هل هناك أي معلومات رأس HTTP لإعادة التوجيه؟
إذا (preg_match("!الموقع: (.*)!", $output, $matches)) {
echo "$test_name: يعيد التوجيه إلى $matches[1]n";
} آخر {
صدى "$test_name: لا يوجد إعادة توجيهn";
}
}
صدى "nn";
}أولاً، نقوم بإنشاء مجموعة من عناوين URL التي تحتاج إلى اختبار، ثم نحدد مجموعة من معلومات المتصفح التي تحتاج إلى اختبار. وأخيرًا، يتم استخدام حلقة لاختبار المواقف المختلفة التي قد تحدث لمطابقة عنوان URL والمتصفح.
نظرًا لأننا حددنا خيار cURL، فإن المخرجات التي تم إرجاعها تتضمن فقط معلومات رأس HTTP (المخزنة في $output). باستخدام قاعدة عادية بسيطة، نتحقق مما إذا كانت معلومات الرأس تحتوي على كلمة "الموقع:".
تشغيل هذا الكود يجب أن يُرجع النتائج التالية:
إرسال البيانات باستخدام طريقة POST عند تقديم طلب GET، يمكن تمرير البيانات إلى عنوان URL عبر "سلسلة استعلام". على سبيل المثال، عند البحث في Google، يكون مفتاح البحث جزءًا من سلسلة الاستعلام الخاصة بعنوان URL:
http://www.google.com/search?q=nettuts في هذه الحالة ربما لا تحتاج إلى cURL للمحاكاة. سيؤدي إلقاء عنوان URL هذا إلى "file_get_contents()" إلى الحصول على نفس النتيجة.
ومع ذلك، يتم إرسال بعض نماذج HTML باستخدام أسلوب POST. عند إرسال هذا النموذج، يتم إرسال البيانات من خلال نص طلب HTTP (نص الطلب) بدلاً من سلسلة الاستعلام. على سبيل المثال، عند استخدام نموذج منتدى CodeIgniter، بغض النظر عن الكلمات الرئيسية التي تدخلها، سيتم دائمًا نشرك في الصفحة التالية:
http://codeigniter.com/forums/do_search/ يمكنك استخدام برنامج PHP النصي لمحاكاة طلب عنوان URL هذا. أولاً، قم بإنشاء ملف جديد يمكنه قبول وعرض بيانات POST ونطلق عليه اسم post_output.php:
print_r($_POST); بعد ذلك، اكتب برنامج PHP النصي لتنفيذ طلب cURL:
$url = " http://localhost/post_output.php ";
$post_data = صفيف (
"فو" => "شريط"،
"استعلام" => "Nettuts"،
"إجراء" => "إرسال"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// نحن نقوم بنشر البيانات!
curl_setopt($ch, CURLOPT_POST, 1);
// أضف متغير النشر
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
تجعيد_إغلاق($ch);
echo $output;بعد تنفيذ الكود، يجب أن تحصل على النتائج التالية:
يرسل هذا البرنامج النصي طلب POST إلى post_output.php، وهو متغير $_POST الخاص بالصفحة ويعيده، ونقوم بالتقاط هذا الإخراج باستخدام cURL.
تحميل الملفات يشبه تحميل الملفات إلى حد كبير POST السابق. لأن جميع نماذج تحميل الملفات يتم إرسالها من خلال طريقة POST.
أولاً، قم بإنشاء صفحة جديدة لتلقي الملفات، باسم upload_output.php:
print_r($_FILES);ما يلي هو البرنامج النصي الذي ينفذ بالفعل مهمة تحميل الملف:
$url = " http://localhost/upload_output.php ";
$post_data = صفيف (
"فو" => "شريط"،
// عنوان الملف المحلي المراد تحميله
"upload" => "@C:/wamp/www/test.zip"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
تجعيد_إغلاق($ch);
echo $output; إذا كنت بحاجة إلى تحميل ملف، فما عليك سوى تمرير مسار الملف مثل متغير النشر، ولكن تذكر إضافة الرمز @ في المقدمة. يجب أن يؤدي تنفيذ هذا البرنامج النصي إلى الإخراج التالي:
معالجة دفعات cURL (متعددة cURL)
يحتوي cURL أيضًا على ميزة متقدمة - مقابض الدُفعات. تتيح لك هذه الميزة فتح اتصالات URL متعددة في وقت واحد أو بشكل غير متزامن.
فيما يلي نموذج التعليمات البرمجية من php.net:
// أنشئ مصدرين لعنوان URL
$ch1 = curl_init();
$ch2 = curl_init();
// حدد عنوان URL والمعلمات المناسبة
curl_setopt($ch1, CURLOPT_URL, " http://lxr.php.net/ ");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, " http://www.php.net/ ");
curl_setopt($ch2, CURLOPT_HEADER, 0);
// إنشاء مقبض دفعة cURL
$mh = curl_multi_init();
// أضف أول مقابض موارد
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
// تحديد متغير الحالة مسبقًا
$active = null;
// تنفيذ المعالجة المجمعة
يفعل {
$mrc = curl_multi_exec($mh, $active);
} بينما ($mrc == CURLM_CALL_MULTI_PERFORM);
بينما ($active && $mrc == CURLM_OK) {
إذا (curl_multi_select($mh) != -1) {
يفعل {
$mrc = curl_multi_exec($mh, $active);
} بينما ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
// أغلق كل مقبض
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_ Close($mh); ما عليك فعله هنا هو فتح مقابض cURL متعددة وتعيينها لمقبض دفعي. ثم عليك فقط الانتظار في حلقة من الوقت حتى يكتمل.
هناك حلقتان رئيسيتان في هذا المثال. تستدعي حلقة do-while الأولى curl_multi_exec() بشكل متكرر. هذه الوظيفة غير محظورة ولكن سيتم تنفيذها بأقل قدر ممكن. تقوم بإرجاع قيمة الحالة. طالما أن هذه القيمة تساوي CURLM_CALL_MULTI_PERFORM، فهذا يعني أنه لا يزال هناك بعض العمل العاجل الذي يتعين القيام به (على سبيل المثال، إرسال معلومات رأس http المقابلة لعنوان URL). أي أننا بحاجة إلى الاستمرار في استدعاء هذه الوظيفة حتى تتغير قيمة الإرجاع.
سوف تستمر حلقة while التالية فقط عندما يكون المتغير النشط $ صحيحًا. تم تمرير هذا المتغير مسبقًا إلى curl_multi_exec() كمعلمة ثانية ويمثل ما إذا كانت لا تزال هناك اتصالات نشطة في مقبض الدُفعة. بعد ذلك، نسميها ()curl_multi_select، والتي تكون "محظورة" حتى يحدث اتصال نشط (مثل تلقي استجابة الخادم). بعد تنفيذ هذه الوظيفة بنجاح، سندخل في حلقة تنفيذ أخرى ونستمر إلى عنوان URL التالي.
دعونا نلقي نظرة على كيفية وضع هذه الميزة للاستخدام العملي:
مدقق اتصال WordPress تخيل أن لديك مدونة تحتوي على عدد كبير من المقالات التي تحتوي على عدد كبير من الروابط لمواقع الويب الخارجية. وبعد فترة، أصبح عدد لا بأس به من هذه الروابط غير صالح لسبب أو لآخر. إما أنه تمت مواءمته، أو تم اختراق الموقع بأكمله...
لنقم بإنشاء برنامج نصي أدناه لتحليل كل هذه الروابط، ومعرفة مواقع الويب/صفحات الويب التي لا يمكن فتحها أو التي تحتوي على 404، وإنشاء تقرير.
يرجى ملاحظة أن ما يلي ليس مكونًا إضافيًا حقيقيًا لـ WordPress، فهو مجرد برنامج نصي بوظائف مستقلة، للتوضيح فقط، شكرًا لك.
حسنًا، لنبدأ. أولاً، اقرأ جميع هذه الروابط من قاعدة البيانات:
//التكوين
$db_host = 'المضيف المحلي';
$db_user = 'الجذر';
$db_pass = '';
$db_name = 'ووردبريس';
$excluded_domains = صفيف(
"المضيف المحلي"، "www.mydomain.com")؛
$max_connections = 10؛
// تهيئة بعض المتغيرات
$url_list = array();
$working_urls = array();
$dead_urls = array();
$not_found_urls = array();
$active = null;
// اتصل بـ MySQL
إذا (!mysql_connect($db_host, $db_user, $db_pass)) {
يموت ("تعذر الاتصال:" . mysql_error());
}
إذا (!mysql_select_db($db_name)) {
يموت ("تعذر تحديد ديسيبل:" . mysql_error());
}
// ابحث عن جميع المقالات ذات الروابط
$q = "اختر محتوى post_content من wp_posts
أين post_content مثل '%href=%'
AND post_status = "نشر"
AND post_type = 'post'";
$r = mysql_query($q) أو يموت(mysql_error());
بينما ($d = mysql_fetch_assoc($r)) {
// استخدم روابط المطابقة العادية
if (preg_match_all("!href="(.*?)"!", $d['post_content'], $matches)) {
foreach ($matches[1] كـ $url) {
// استبعاد بعض المجالات
$tmp = parse_url($url);
إذا (in_array($tmp['host'], $excluded_domains)) {
يكمل؛
}
// قم بتخزين عنوان url
$url_list []= $url;
}
}
}
// إزالة الروابط المكررة
$url_list = array_values(array_unique($url_list));
إذا (!$url_list) {
die("لا يوجد عنوان URL للتحقق");
}نقوم أولاً بتكوين قاعدة البيانات، وسلسلة من أسماء النطاقات المراد استبعادها ($excluded_domains)، والحد الأقصى لعدد الاتصالات المتزامنة ($max_connections). بعد ذلك، اتصل بقاعدة البيانات، واحصل على المقالات والروابط المضمنة، واجمعها في مصفوفة ($url_list).
الكود أدناه معقد بعض الشيء، لذا سأشرحه بالتفصيل خطوة بخطوة:
// 1. معالج دفعة
$mh = curl_multi_init();
// 2. أضف عناوين URL التي تحتاج إلى المعالجة على دفعات
لـ ($i = 0; $i < $max_connections; $i++) {
add_url_to_multi_handle($mh, $url_list);
}
// 3. المعالجة الأولية
يفعل {
$mrc = curl_multi_exec($mh, $active);
} بينما ($mrc == CURLM_CALL_MULTI_PERFORM);
// 4. الحلقة الرئيسية
بينما ($active && $mrc == CURLM_OK) {
// 5. يوجد اتصال نشط
إذا (curl_multi_select($mh) != -1) {
// 6. العمل
يفعل {
$mrc = curl_multi_exec($mh, $active);
} بينما ($mrc == CURLM_CALL_MULTI_PERFORM);
// 7. هل لديك أي معلومات؟
إذا ($mhinfo = curl_multi_info_read($mh)) {
// يعني أن الاتصال انتهى بشكل طبيعي
// 8. احصل على المعلومات من مقبض الضفيرة
$chinfo = curl_getinfo($mhinfo['handle']);
// 9. الرابط الميت؟
إذا (!$chinfo['http_code']) {
$dead_urls []= $chinfo['url'];
// 10.404؟
} else if ($chinfo['http_code'] == 404) {
$not_found_urls []= $chinfo['url'];
// 11. لا يزال متاحا
} آخر {
$working_urls []= $chinfo['url'];
}
// 12. قم بإزالة المقبض
curl_multi_remove_handle($mh, $mhinfo['handle']);
Curl_Close($mhinfo['handle']);
// 13. أضف عنوان URL جديدًا وقم بالعمل
إذا (add_url_to_multi_handle($mh, $url_list)) {
يفعل {
$mrc = curl_multi_exec($mh, $active);
} بينما ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
}
}
// 14. انتهى
Curl_multi_Close($mh);
echo "==عناوين URL الميتة==n";
صدى ينفجر("n",$dead_urls) "nn";
صدى "==404 عناوين URL==n";
echo implode("n",$not_found_urls) "nn";
echo "==عناوين URL العاملة==n";
echo implode("n",$working_urls);
// 15. أضف عنوان url إلى معالج الدُفعات
الوظيفة add_url_to_multi_handle($mh, $url_list) {
مؤشر $ ثابت = 0؛
// إذا بقي عنوان URL، فهو عديم الفائدة
إذا ($url_list[$index]) {
// أنشئ مقبض تجعيد جديد
$ch = curl_init();
// تكوين عنوان url
curl_setopt($ch, CURLOPT_URL, $url_list[$index]);
// لا تريد إخراج المحتوى الذي تم إرجاعه
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// سنذهب أينما تأخذنا عملية إعادة التوجيه
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// لا يلزم وجود نص محتوى، مما يوفر النطاق الترددي والوقت
curl_setopt($ch, CURLOPT_NOBODY, 1);
// أضف إلى معالج الدُفعات
curl_multi_add_handle($mh, $ch);
// اطلب العداد ويمكنك إضافة عنوان url التالي في المرة التالية التي تستدعي فيها هذه الوظيفة.
$index++;
عودة صحيحة؛
} آخر {
// لا يلزم معالجة عناوين URL الجديدة
عودة كاذبة.
}
}تم شرح الكود أعلاه أدناه. تتوافق الأرقام التسلسلية الموجودة في القائمة مع الأرقام التسلسلية الموجودة في تعليقات الكود.
إنشاء معالج دفعة جديد. تم إنشاء مقبض متعدد.
سنقوم لاحقًا بإنشاء وظيفة add_url_to_multi_handle() التي تضيف عناوين URL إلى معالج الدُفعات. عندما يتم استدعاء هذه الوظيفة، تتم إضافة عنوان URL جديد إلى معالج الدُفعات. في البداية، نضيف 10 عناوين URL إلى معالج الدُفعات (يتم تحديد هذا الرقم بواسطة $max_connections).
من الضروري تشغيل curl_multi_exec() للقيام بأعمال التهيئة، طالما أنه يُرجع CURLM_CALL_MULTI_PERFORM فلا يزال هناك شيء يجب القيام به. يتم ذلك بشكل أساسي لإنشاء الاتصال، ولا ينتظر استجابة عنوان URL الكامل.
تستمر الحلقة الرئيسية طالما توجد اتصالات نشطة في الدفعة.
ينتظر curl_multi_select() حتى يؤدي استعلام URL إلى اتصال نشط.
عاد عمل cURL مرة أخرى، وذلك بشكل أساسي للحصول على بيانات الاستجابة.
التحقق من المعلومات المختلفة. عند اكتمال طلب URL، يتم إرجاع مصفوفة.
يوجد مقبض cURL في المصفوفة التي تم إرجاعها. نستخدمها للحصول على المعلومات المقابلة لطلب cURL واحد.
إذا كان هذا الرابط ميتًا أو انتهت مهلة الطلب، فلن يتم إرجاع رمز حالة http.
إذا تعذر العثور على هذه الصفحة، فسيتم إرجاع رمز الحالة 404.
وفي حالات أخرى، نفترض أن هذا الرابط متاح (بالطبع، يمكنك أيضًا التحقق من وجود 500 خطأ وما شابه ذلك...).
قم بإزالة مقبض cURL هذا من المجموعة لأنه لم يعد صالحًا للاستخدام، أغلقه!
رائع، يمكنك الآن إضافة عنوان URL آخر. ومن جديد تبدأ أعمال التهيئة من جديد..
حسنًا، كل ما يجب القيام به قد تم. أغلق معالج الدُفعات وأنشئ التقرير.
دعنا نعود إلى الوظيفة التي تضيف عنوان URL جديدًا إلى معالج الدُفعات. في كل مرة يتم استدعاء هذه الوظيفة، يتم زيادة المتغير الثابت $index حتى نتمكن من معرفة عدد عناوين URL المتبقية للمعالجة.
لقد قمت بتشغيل هذا البرنامج النصي على مدونتي (بحاجة إلى الاختبار، تمت إضافة بعض الروابط الخاطئة عمدًا)، وكانت النتائج كما يلي:
تم فحص إجمالي حوالي 40 عنوان URL واستغرق الأمر أقل من ثانيتين. عندما تحتاج إلى التحقق من عدد أكبر من عناوين URL، يمكنك تخيل التأثير المخفف للقلق! إذا قمت بفتح 10 اتصالات في نفس الوقت، فسيكون ذلك أسرع 10 مرات! بالإضافة إلى ذلك، يمكنك أيضًا الاستفادة من ميزة عدم الحظر الخاصة بالمعالجة المجمعة لـ cURL للتعامل مع عدد كبير من طلبات URL دون حظر نصوص الويب الخاصة بك.
بعض خيارات cURL المفيدة الأخرى
مصادقة HTTP إذا كان طلب URL يتطلب مصادقة مستندة إلى HTTP، فيمكنك استخدام التعليمات البرمجية التالية:
$url = " http://www.somesite.com/members/ ";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//أرسل اسم المستخدم وكلمة المرور
curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");
// يمكنك السماح له بإعادة التوجيه
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// تسمح الخيارات التالية بـ cURL
// يمكن أيضًا إرسال اسم المستخدم وكلمة المرور
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);
$output = curl_exec($ch);
Curl_Close($ch);تحميل FTP
تأتي PHP مع مكتبة FTP الخاصة بها، ولكن يمكنك أيضًا استخدام cURL:
// افتح مؤشر الملف
$file = fopen("/path/to/file", "r");
// يحتوي عنوان url على معظم المعلومات المطلوبة
$url = " ftp://username:[email protected]:21/path/to/new/file ";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// تحميل الخيارات ذات الصلة
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, حجم الملف("/path/to/file"));
// ما إذا كان سيتم تمكين وضع ASCII (مفيد عند تحميل الملفات النصية)
curl_setopt($ch, CURLOPT_FTPASCII, 1);
$output = curl_exec($ch);
Curl_Close($ch); للتحايل على الجدار، يمكنك استخدام وكيل لبدء طلب cURL:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// حدد عنوان الوكيل
curl_setopt($ch, CURLOPT_PROXY, '11.11.11.11:8080');
// قم بتوفير اسم المستخدم وكلمة المرور إذا لزم الأمر
curl_setopt($ch, CURLOPT_PROXYUSERPWD,'user:pass');
$output = curl_exec($ch);
تسمح وظيفة رد الاتصال لـ cURL باستدعاء وظيفة رد اتصال محددة أثناء طلب عنوان URL. على سبيل المثال، ابدأ في استخدام البيانات بمجرد تنزيل المحتوى أو الاستجابة، بدلاً من الانتظار حتى يتم تنزيلها بالكامل.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://net.tutsplus.com');
curl_setopt($ch, CURLOPT_WRITEFUNCTION,"progress_function");
curl_exec($ch);
حليقة_إغلاق ($ch);
وظيفة التقدم_وظيفة($ch,$str) {
صدى $str;
إرجاع سترلين($str);
}يجب أن تقوم وظيفة رد الاتصال هذه بإرجاع طول السلسلة، وإلا فلن تعمل هذه الوظيفة بشكل صحيح.
أثناء عملية استقبال استجابة URL، سيتم استدعاء هذه الوظيفة طالما تم استلام حزمة البيانات.
ملخص تعلمنا اليوم عن الوظائف القوية وقابلية التوسع المرنة لمكتبة cURL. آمل أن يعجبك. في المرة القادمة التي تريد فيها تقديم طلب URL، فكر في cURL!
شكرًا!
النص الأصلي: بداية سريعة باستخدام cURL استنادًا إلى PHP
النص الإنجليزي الأصلي: http://net.tutsplus.com/tutorials/php/techniques-and-resources-for-mastering-curl/
المؤلف الأصلي: بوراك جوزيل
يجب الاحتفاظ بالمصدر لإعادة الطباعة.