Практический урок 2. Авторизация на liveinternet с помощью cURL

Продолжаем писать парсер статистики посещений liveinternet. Если кто-то присоединился к нам только что, то советую начать с первого урока, где мы подключались к сервису без авторизации. Там мы научились получать контент с открытых страничек, которые не защищены паролем. Но, на самом деле, доступ к большинству сайтов закрыт, поэтому пользы от скрипта, который не умеет авторизовываться, очень мало, как вы понимаете. Но не беспокойтесь, сейчас все исправим.

На самом деле переделывать придется не много, достаточно лишь добавить одну функцию, которая будет отправлять POST запрос и в ответ получит cookie, которые мы сохраним в текстовый файл. Все это сделает за нас библиотека cURL, достаточно лишь правильно попросить ее об этом :) Давайте попробуем:

function auth( $url )
{
  $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14"; 
  $ch = curl_init( $url ); 
  curl_setopt($ch, CURLOPT_URL,$url);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
  curl_setopt($ch, CURLOPT_POST,1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, "url=http://mysite.ru&password=pass");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // возвращает веб-страницу  
  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
  curl_exec ($ch);
  curl_close( $ch );
}

Как я и упоминал выше, вся суть работы функции сводится к:

  • Отправке POST запроса, с помощью параметров CURLOPT_POST, которомы мы присваиваем значение 1, а также CURLOPT_POSTFIELDS, который содержит передаваемые параметры. Как понять, что нам нужно отправить, я расскажу чуть ниже.
  • Сохранению полученных в ответ cookieв файл. Это делается с помощью параметра CURLOPT_COOKIEJAR, значение которого — путь, куда сохранять файл.

Еще пару слов о значениях, которые мы присваиваем свойствам CURLOPT_POSTFIELDS и CURLOPT_COOKIEJAR. Начнем с первого — CURLOPT_POSTFIELDS. Это параметры, которые мы передаем в форму авторизации. Смотрите, когда мы заполняем форму на сайте, то эти данные отправляются на сервер в POST запросе. Как выглядит форма на liveinternet:
форма авторизации liveinternet
на содержит два поля: адрес сайта и пароль к статистике. Как понять, в каком виде эти данные отправляются на сервер? На самом деле, это иногда бывает достаточно сложно, но не в случае с LI, тут нам достаточно воспользоваться, например, Opera Dragonfly, о которой я уже писал здесь и с ее помощью отследить передаваемые параметры. Открываем страницу с формой авторизации и инструмент Dragonfly. Заполняем поля и нажимаем ОК. Вот что мы увидим:
liveinternet post
Нужные нам параметры — url и password. Их и передаем в свойстве CURLOPT_POSTFIELDS.

Затем, что касается CURLOPT_COOKIEJAR, а точнее, данный, которые мы ей присваиваем.

$_SERVER['DOCUMENT_ROOT']

Это переменная окружения, которая содержит путь к корню, то есть, в нашем случае, к странице с парсером. Подробнее про глобальный массив $_SERVER[] можете почитать в интернете, на самом деле он очень полезный и содержит множество нужной информации, возможно, позже даже будет отдельный мини урок по этому массиву.

Что же, наша функция авторизации на сервисе статистики liveinternet готова, осталось лишь чуть исправить функцию получения страницы, которую мы использовали в прошлом уроке — get_web_page. Сюда нам нужно добавить всего один дополнительный параметр, чтобы сказать cURL, где лежит файл с cookie, который мы сохранили при авторизации. Делается это так:

curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');

Все, теперь перед нашим циклом, который получает странички и парсит их, достаточно авторизоваться:

$result = auth("http://www.liveinternet.ru/stat/mysite.ru/");

Готово, если все сделано правильно, то вы сможете получить статистику ключевых слов с закрытых страниц, конечно, если у вас есть от них пароль :)

В следующем уроке мы разберем регулярные выражения, чтобы вы смогли написать собственный парсер для любого сайта или документа. До скорого!

Парсер статистики Liveinternet | Содержание | Регулярные выражения

Комментарии:

  1. Valek — 11.11.2013 01:37

    А когда буде следующий урок????

  2. myblaze 11.11.2013 17:34

    Постараюсь в ближайшее время написать. Понимаю, что вас это не должно заботить, но времени вообще нету :)

  3. Valek — 11.11.2013 19:52

    Спасибо вам еще раз за ваши уроки!Буду ждать с нетерпением ваших уроков

  4. Юрий — 31.10.2014 20:44

    А не чего не изменилось в авторизации liveinternet.ru ?
    Не получается авторизоваться и всё тут

    И файл cookie.txt пустой остаётся

  5. myblaze 01.11.2014 09:50

    Юрий, не знаю, если честно, может-быть что-то поменяли, хотя вряд ли. Li за столько лет своего существования практически никаких видимых обновлений не делали, а ведь контора одна из старейших в рунете.

  6. Рома — 25.11.2014 17:45

    Не могу разобраться с авторизацией((

Добавить комментарий