скачать файл с помощью Curl

sasha465

Well-known member
29.03.2009
69
0
#1
Здача такая: есть форма:
Код:
<form id="form" action="" method="post" name="form">
<input type="hidden" value="19179" name="id">
<input id="s" type="submit" value="Скачать файл" name="s">
Нажимая на кнопку Скачать файл, мы начинаем скачивать файл. Из формы видно что здсь применяется POST запрос. Приведу сначала http-заголовки, перехваченные после нажатия кнопки:
POST /download/19179/ HTTP/1.1

Host: driverloader.ru

User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Accept-Charset: KOI8-R,utf-8;q=0.7,*;q=0.7

Keep-Alive: 115

Connection: keep-alive

Referer: http://driverloader.ru/download/19179/

Content-Type: application/x-www-form-urlencoded

Content-Length: 78

id=19179&s=%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C+%D1%84%D0%B0%D0%B9%D0%BB

HTTP/1.1 200 OK

Server: nginx admin

Date: Mon, 30 May 2011 11:23:10 GMT

Content-Type: application/octet-stream

Transfer-Encoding: chunked

Connection: close

X-Powered-By: PHP/5.2.17

Content-Disposition: attachment; filename=NVIDIA GeForce FX 5500.exe

X-Cache: HIT from Backend

Как только я не пытался написать функцию автоматического получения этого файла, ничего не выходило, привожу скрипт, что называется "все включено":
PHP:
function GetFile($url,$ref,$v,$file){
$agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13';
$header[] = 'Host: driverloader.ru';
$header[] = 'Content-type: application/x-www-form-urlencoded';
if( $curl = curl_init($ref) ){
// Задаем ссылку
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
// Скачанные данные не выводить поток
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
// Нужно вывести http заголовки в массив
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
curl_setopt($curl,CURLOPT_REFERER,$url); 
curl_setopt($curl, CURLOPT_HEADER, 1);
//Устанавливаем опцию хождения по всем редиректам
//обрабатываем все кодировки
curl_setopt($curl, CURLOPT_ENCODING, "");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
// не проверять Host SSL сертификата
curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_COOKIEJAR, "coo.txt");
curl_setopt($curl, CURLOPT_COOKIEFILE,"coo.txt");
//переменные, которые будут переданы по методу post
curl_setopt($curl, CURLOPT_POSTFIELDS,'id=19179&s='.urlencode('Скачать файл')); 
$info=curl_getinfo($curl);	
// Скачиваем
$l= curl_exec($curl);
// Закрываем соединение
curl_close($curl);
if ($l)
{
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$file);
header('Content-Length: '.strlen($l));
return $l;
exit();
}
}
else return "error";
}
В переменной $v должны были передаваться post-параметры, но я сделал для наглядности явное их определение, в переменной $file имя файла, в это случае это "NVIDIA GeForce FX 5500.exe".
Надеюсь кто-нибудь мне подскажет что нет так) Кстати прилагаю сайт на котором находится эта форма: сайт