بسم الله الرحمن الرحيم
كنت بحاجة إلى جلب بعض المعلومات وتحليلها الفترة السابقة من احدى المواقع ..
ولكن فوجئت بان الجلب ممنوع !
الموضوع بدأ معي من ذاك الموقع ، فمن خلال تجاربي للتغلب على خاصية منع الجلب ، اعجبتني فكرة منع الجلب نفسها
والتي قمت بابتكارها ..
الفكرة كلها ، هي تحديد اذا ماكان هوية الذي يتعامل معك هو ( متصفح ) اي انسان ، ام مجرد برنامج ( آلة ) ..
وبمجرد التحديد .. يمكنك التحكم بزمام الأمور
كيفية التفرقة بين المتصفح الحقيقي والآلة ؟
هناك العديد من الطرق للتفرقة ،
* من اسهلها : HTTP_USER_AGENT : لجلب نوعية المتصفح ، و في اغلب حالات برامج الجلب ، لن تكون لها قيمة ..
* قيم أخرى يمكن التحقق منها ..
* واخطر نقطة وهي ( الكوكيز ) ، فمن المعروف ان الكوكيز يتم تخزينه من خلال المتصفح على جهازك ، والمتصفح هو من يقوم بلعب دور المنسق بين جهازك + السيرفر .. وبدون المتصفح لن يكون السيرفر قادرا على انشاء الكوكيز على جهازك ( لا تقل ان برنامج الجلب ايضا يستخدم متصفح ! لأن الكوكيز تشترط وجود نفس ال domain لكي تعمل ! وبالطبع السبايدر او برنامج الجلب سيكون على موقع آخر بدومين آخر )
العملية ستكون كالتالي :
تقوم بزرع الكوكيز
التحقق من الكوكيز
اذا تم انشاءه بشكل صحيح ، فهذا زائر حقيقي وتابع عملك
اذا كانت قيمته فارغة ، فهناك احتمالان ( انه سبايدر - او ان المتصفح يرفض الكوكيز )
وبالطبع ، فلا اعتقد ان هناك من يقوم باقفال الكوكيز من خلال المتصفح هذه الايام ، والا سيتعب كثيرا خلال تصفحه .. وعلى اي حال ستكون هذه مشكلته وليست مشكلتنا 
الكود :
بداية قم بانشاء ملف وليكن :
main.php
وضع بداخله :
كود PHP:
<?php
echo "hello swalif !";
?>
وقم بانشاء ملف آخر وسميه :
scrape.php
وضع فيه :
كود PHP:
<?php
$str = file_get_contents("http://localhost/main.php");
echo $str;
?>
توجه إلى :
http://localhost/scrape.php
هذه عملية جلب طبيعية جدا .. وسيتم طباعة المحتويات والتي هي hello swalif !
والآن لمنع الجلب
قم بتعديل كود main.php :
كود PHP:
<?php
header("Set-Cookie: ahmed=booom"); // you can use setcookie or $_COOKIE too
ob_start(); //start buffering
echo $_COOKIE['ahmed']; //print out the value of the cookie
$str = ob_get_contents(); //put the output into a variable
ob_end_clean(); //clean up
if (empty($str)){ //It's spider, or browser refused the cookies
die("الا يفترض بك ان تكون في مكان آخر ؟");
}else{ //It's a real visitor
echo $str;
}
?>
الآن توجه إلى :
http://localhost/main.php
سيطبع لك قيمة الكوكي .. او يطبع لك الموقع بشكل عادي ( الذي تم وضعه في مكان else )
توجه إلى :
http://localhost/scrape.php
سيطبع لك : الا يفترض بك ان تكون في مكان آخر
العيوب :
للاسف هذه الطريقة قابلة للكسر .. من خلال Browser Emulator ، وهو ايهام السيرفر بان من يتعامل معه هو المتصفح ، فيستقبل منه الكوكيز ويزرعها ، ويرسل كل الهيدرز اللازمة وكل شيء
(وهي ما قمت باستخدامه للتغلب على الموقع في بداية الموضوع
)
الطريقة كما قلت ليست محصنة 100% ولكن على الاقل قمت بتقليل نسبة الجلب لمعلومات موقعك المهمة او المميزة بنسبة لا تقل عن 80% ..
اتمنى تكون الفكرة واضحة والكود واضح