السلام عليكم
ربما يكون الموضوع قديم نوعًا ما لكن لا مانع من تنشيط الذاكرة
كتبت دالتين للتعامل مع موقع الهوت فايل ، ومن الممكن ان تستعملهما مع مواقع اخرى
بنفس الطريقة تقريبًا اذ ان المبدا واحد
الدالة الأولى تقوم بتسجيل الدخول إلى الموقع وتحفظ لنا الكوكي في ملف منفصل
والثانية تستعمل الكوكي لتسجيل الدخول إلى الموقع ثم تقوم بتنزيل الملف من الموقع
طبعًا هنا مطلوب حساب مدفوع في الهوت فايل حتى تتمكن من سحب الملفات
الدالة الأولى:
كود PHP:
function getCookie($url,$data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS ,http_build_query($data));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_COOKIEJAR, CPATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, CPATH);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result = curl_exec ($ch);
curl_close($ch);
}
الدالة الثانية:
كود PHP:
function download($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_COOKIEJAR, CPATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, CPATH);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,TRUE);
$result = curl_exec ($ch);
curl_close($ch);
file_put_contents(str_replace(".html","",basename($url)), $result);
}
شرح قصير:
نستعمل مكتبة curl لانجاز الامر، إذ انها تمتاز بالمقدرة على حفظ الكوكيز المرجعة من الطلب، مما يعطي افضل محاكاة للمتصفح، خصوصًا انه عندما ننزل الملف لن نحتاج
لتسجيل الدخول من جديد بل نستخدم الكوكيز.
في الدالة الأولى نرسل اسم المستخدم وكلمة المرور بطلب post إلى صفحة التسجيل
هذان السطرين مسؤولان عن حفظ واسترجاع الكوكيز
كود PHP:
curl_setopt($ch, CURLOPT_COOKIEJAR, CPATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, CPATH);
هذا البارمتر مهم جدًا اذ انه يخبر curl بأننا لا نريد إرجاع الهيدر مع النتيجة
إذ ان طباعة الهيدر داخل الملف خصوصًا لو كان صورة أو فيديو من شأنها اتلاف الملف
لأنه يحوي معلومات ليست لها علاقة بالملف نفسه.
كود PHP:
curl_setopt($ch, CURLOPT_HEADER, false);
الامر الأول يطلب من ال curl ارجاع النتيجة على شكل نص لمتغير، اذ ان الاجراء الافتراضي هو طباعة النتيجة على الصفحة.
الثاني يفعّل عملية اعادة التحويل .
كود PHP:
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,TRUE);
السكربت كامل:
كود PHP:
<?php
$usr = "hotfile_user";
$pwd = "hotfile_pwd";
$login_url = "http://hotfile.com/login.php";
define("CPATH",dirname(__FILE__)."/cookie.txt");
$target = "http://hotfile.com/dl/101287447/6dd0072/allah.jpg.html";
$credit = array('user'=>$usr,'pass'=>$pwd,'returnto'=>'2%F',''=>'login');
if (!file_exists(CPATH))
getCookie($login_url,$credit);
download($target);
function getCookie($url,$data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS ,http_build_query($data));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_COOKIEJAR, CPATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, CPATH);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result = curl_exec ($ch);
curl_close($ch);
}
function download($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_COOKIEJAR, CPATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, CPATH);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,TRUE);
$result = curl_exec ($ch);
curl_close($ch);
file_put_contents(str_replace(".html","",basename($url)), $result);
}
?>
طبعًا انتم تعلمون ان وقت تنفيذ الphp محدود (30 ثانية غالبًا)
يمكن استعمال الدالة التالية لتطويل وقت التنفيذ(عند الملفات الكبيرة)
http://php.net/manual/en/function.set-time-limit.php
هذه الطريقة ليست الأفضل لكنها تعمل جيدًا 
تحياتي