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

Тема в разделе "PHP программирование", создана пользователем sasha465, 30 май 2011.

Наш партнер Genesis Hackspace
  1. sasha465

    sasha465 Well-Known Member

    Регистрация:
    29 мар 2009
    Сообщения:
    69
    Симпатии:
    0
    Здача такая: есть форма:
    Код (Text):
    <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".
    Надеюсь кто-нибудь мне подскажет что нет так) Кстати прилагаю сайт на котором находится эта форма: сайт
     
Загрузка...

Поделиться этой страницей