За последние 24 часа нас посетили 18278 программистов и 1637 роботов. Сейчас ищут 1699 программистов ...

Тянем, потянем или как дурить хост с добром

Тема в разделе "Решения, алгоритмы", создана пользователем yurko, 27 дек 2011.

  1. yurko

    yurko Активный пользователь

    С нами с:
    27 сен 2011
    Сообщения:
    13
    Симпатии:
    0
    Вечер добрый, господа!

    И так. Вот таким кодом я читаю контент со страницы:


    // parameters
    $url = 'http://my-hit.ru/film/6284/online';

    $content = '';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt(
    $curl,
    CURLOPT_HTTPHEADER,
    Array(
    'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1' . "\r\n",
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' . "\r\n",
    'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3' . "\r\n",
    'Accept-Encoding: gzip, deflate' . "\r\n",
    'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7' . "\r\n",
    'Connection: keep-alive' . "\r\n",
    "\r\n"
    )
    );
    $nameFilecookies = dirname($_SERVER['SCRIPT_FILENAME']) . '/' . 'filecookies';
    curl_setopt($curl, CURLOPT_COOKIEJAR, $nameFilecookies);
    curl_setopt($curl, CURLOPT_COOKIEFILE, $nameFilecookies);
    curl_setopt($curl, CURLOPT_TIMEOUT, 5);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $content = curl_exec($curl);
    curl_close($curl);
    return $content;



    Страница считывается нормально, но что-то происходит с нужными мне ссылками, которые расположены в теле текста страницы. Причём, что интересно, когда скрипт работает на домашнем серваке под виндой, то ссылки нормальные, не битые, а как только запускаю скрипт на хостинге, нужные ссылки битые. Как получить нужные ссылки? Хост как-то определяет, что контент читает бот и выдаёт битые ссылки.

    Нормальная ссылка:
    http://a-44.my-hit.ru/data2/previews/62 ... t=true&buf ferlength=10&streamscript=lighttpd&frontcolor=FFB65A&backcolor=022D96&lightcolor=FF8C00&id=4648b35423ff99110afb07ea021e1280

    Битая:
    http://a-94.my-hit.ru/data2/previews/62 ... t=true&buf ferlength=10&streamscript=lighttpd&frontcolor=FFB65A&backcolor=022D96&lightcolor=FF8C00&id=97cc1f44efc5fb8f756e0eaecff9b534

    id меняется каждые 15 минут, поэтому URL flv-файла необходимо вычислять в рамках сессии.
    Короче, код не пошёл. Попробовал завалиться на хост через прокси:


    // parameters
    $url = 'http://my-hit.ru/film/6284/online';

    $content = '';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt(
    $curl,
    CURLOPT_HTTPHEADER,
    Array(
    'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1' . "\r\n",
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' . "\r\n",
    'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3' . "\r\n",
    'Accept-Encoding: gzip, deflate' . "\r\n",
    'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7' . "\r\n",
    'Connection: keep-alive' . "\r\n",
    "\r\n"
    )
    );
    $nameFilecookies = dirname($_SERVER['SCRIPT_FILENAME']) . '/' . 'filecookies';
    curl_setopt($curl, CURLOPT_COOKIEJAR, $nameFilecookies);
    curl_setopt($curl, CURLOPT_COOKIEFILE, $nameFilecookies);
    curl_setopt($curl, CURLOPT_PROXY, '212.48.197.103');
    curl_setopt($curl, CURLOPT_PROXYPORT, '80');
    curl_setopt($curl, CURLOPT_TIMEOUT, 5);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $content = curl_exec($curl);
    curl_close($curl);
    return $content;



    Вышло, что и на домашнем серваке перестал давать нужные ссылки.

    Джава отпадает. Я отключал джаву в браузере и всё равно всё работает. Значит как-то определяет по хидерам, что бот. По другому никак.

    Вопрос. Кто-нибудь знает как обойти защиту и получить нужные ссылки на flv-файлы?
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ты не разобрался и выцепил то, что тебе показалось ссылкой. И здесь постишь это как ссылку и утверждаешь, что не работает. Ты же даже скопировал не полностью :)

    То, что ты называешь ссылкой - это на самом деле параметры, которые передаются во флешплеер. Там вот так:

    Код (Text):
    1. flashvars="file=http://a-84.my-hit.ru/data2/previews/6284.flv&showstop=true&
    2. autostart=true&bufferlength=10&streamscript=lighttpd&frontcolor=FFB65A&
    3. backcolor=022D96&lightcolor=FF8C00&id=299d96ea90129b666af2df89a7a5dcd4"
    Т.е. во флешплеер передаются следующие параметры:
    Код (Text):
    1. file=http://a-84.my-hit.ru/data2/previews/6284.flv
    2. showstop=true
    3. autostart=true
    4. bufferlength=10
    5. streamscript=lighttpd
    6. frontcolor=FFB65A
    7. backcolor=022D96
    8. lightcolor=FF8C00
    9. id=299d96ea90129b666af2df89a7a5dcd4
    А вот дальше уже исходя из этих параметров флеш-плеер сам генерирует ссылку, видимо. И получает по ней файл. Причём, он может использовать не все параметры, чтобы получить файл, а только некоторые, какие-то, скорее всего, там для указания настроек отображения (типа fontcolor и т.п.). Возможно, плеер также переименовывает некоторые параметры перед тем, как отправить запрос на сервер. Тебе нужно понять, какой именно запрос отправляет флеш-плеер, какие из этих параметров он присоединяет к запросу, какие нет, в каком они порядке и т.п., чтобы добраться до файла. Чтобы узнать, какой именно запрос уходит из флэша - можешь попробовать установить снифер и разобраться, что это такое и как пользоваться.
     
  3. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    П.С. А зачем тебе это всё хоть? Сохранить видеоконтент со всяких ютубов и прочих флэш-видеороликов можно с помощью браузера, в разных браузерах это по-разному. Если мне хочется сохранить ролик себе на комп - я делаю это через Оперу, там всё довольно просто и удобно. Открываешь вкладку с кэшем (opera:cache в адресной строке) и выбираешь там, чтобы показывал только видеоконтент. Дальше открываешь ссылку с самим видеороликом, после чего снова переходишь на вкладку с кэшем - как начинается загрузка ролика - там появляется новый элемент. Щёлкаешь по нём и Опера сама сразу предложит тебе сохранить его на жёсткий диск.

    Просто я не представляю, зачем это можно делать скриптом? Неужели хочешь все киношки потырить? Обычно сохранишь себе какой-нибудь особо понравившийся фильм - и ладно.

    А если хочешь всё потырить и свой аналогичный сайт сделать - то это... нехорошо :)