Авторизация при парсинге php

PHP парсер с авторизацией

PHP парсер с авторизацией

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

Информация о том, авторизован пользователь или нет, часто хранится в Cookies. Составить правильный запрос и обработать файлы Cookies нам поможет библиотека cURL.

Предварительно нужно понять, как работает механизм авторизации на сайте, какие передаются переменные после отправки данных формы входа. Эти данные можно проанализировать с помощью инструментов разработчика в браузере.

Форма входа Gearbest

В качестве примера разберём парсер баланса баллов в интернет-магазине Gearbest. В html коде формы входа видим название полей ввода логина и пароля, а также адрес страницы-обработчика: /m-users-a-act_sign.htm.

Далее попытаемся авторизоваться и отследить какие запросы отправляются на сервер. Введя правильные логин и пароль мне не удалось успеть увидеть нужные запросы, так как происходит несколько редиректов. А сам запрос авторизации отправляется по AJAX.

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

POST запрос авторизации на сайте Gearbest

На следующем шаге смотрим код страницы личного кабинета и прикидываем, как спарсить данные баланса бонусных баллов.

HTML код личного кабинета gearbest.com

На основе полученной информации можно написать PHP парсер баланса баллов с авторизацией. Я решил дописать ряд функций для парсера из предыдущего примера. Для составления POST запросов используем функции библиотеки cURL.

Полученный в результате код парсера с авторизацией:

Для того, чтобы парсер смог авторизоваться, надо ввести свои данные в переменную $user_data.

Из значимых доработок парсера стоит отметить написание функции curl_login(), которая как раз формирует запрос на авторизацию с отправкой POST параметров на сервер. Также для всех функций были добавлены парметры работы с Cookies. Это нужно для того, чтобы информация о том, что парсер залогинен, передавалась от запроса к запросу.

Пример файла Cookies, сгенерированного cURL:

# Netscape HTTP Cookie File # http://curl.haxx.se/docs/http-cookies.html # This file was generated by libcurl! Edit at your own risk. .gearbest.com TRUE / FALSE 0 G_SESSIONID etn15bafqhfiecpjkk3ppdlnv5 .gearbest.com TRUE / FALSE 1495394177 ip_country_code ru .gearbest.com TRUE / FALSE 1492802177 client_ru_np deleted .gearbest.com TRUE / FALSE 1493406977 WEBF-email seorubl%40ya.ru .gearbest.com TRUE / FALSE 1493406977 WEBF-user_id 12478626 .gearbest.com TRUE / FALSE 1523906177 WEBF-dan_num 1 login.gearbest.com FALSE / FALSE 1495394177 avatar https%3A%2F%2Ficss1.gearbest.com%2Fimagecache%2FGB2%2Fimages%2Fdomeimg%2Fscrollimg.gif .gearbest.com TRUE / FALSE 1492802177 WEBF-firstname deleted .gearbest.com TRUE / FALSE 1492802177 WEBF-lastname deleted .gearbest.com TRUE / FALSE 1493406977 usertype 0 .gearbest.com TRUE / FALSE 0 ORIGINDC 2 .gearbest.com TRUE / FALSE 0 Servernode2 node2

После авторизации с помощью функции get_gearbest_login(), мы далее сразу парсим страницу с листом желаний личного кабинета с помощью функции get_gearbest_point().

Далее выводим статус попытки авторизации и бонусный баланс.

Возможные варианты ответов от сервера gearbest.com при попытке авторизации:

  • Successfully sign;
  • The email does not exist, please register;
  • Your email/password is incorrect. Please try again;
  • needCode.

Кстати, если вначале авторизоваться и спарсить баланс баллов, то дальше при парсинге цен на товары, статус авторизованного пользователя будет сохраняться.

Теперь мы знаем, как можно автоматически с помощью PHP и cURL залогиниться на сайте и получить данные со страниц для авторизованных пользователей. В следующих статьях из цикла про разработку парсеров мы рассмотрим примеры применения технологии AJAX для парсинга сайтов.

Источник

Авторизация на сайте, а затем парсинг, как сделать?

Столкнулся с такой проблемой, пишу парсер товаров с сайта, но цены на нем отображаются лишь только при авторизации на нем.

Как мне сначала авторизоваться, а потом уже начать парсить.

Авторизация на сайте, Java парсинг
Задача парсить один сайт(не с интернета, наш корпоративный, к сожалению к базе не имею доступа.

Авторизация на сайте через delphi 7 как?
Авторизация на сайте через delphi 7 как? Помогите, все перепробовал, и не выходит. Помогите.

Авторизация на сайте и получение данных из личного кабинета на сайте
В общем, проштудировав три справочника за неделю и полазав в интернете, кроме как опухнувшего мозга.

Авторизация на сайте по средствам POST запроса. Как расшифровать gzip ответ?
Всем привет, кто может мне помочь или кто тоже столкнулся с похожей проблемой! Проще говоря решил.

Эксперт PHP

ЦитатаСообщение от zmanz Посмотреть сообщение

Посмотрите, куда идёт запрос при отправке формы входа. Затем с помощью CURL подделайте запрос. Сохранять и передавать cookie в CURL нужно, указав настройки CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR.

lyod, А как посмотреть куда идет запрос при отправке формы данных? Я так понимаю мне нужно там авторизоваться и посмотреть куку?
Ну а что такое CURL буду сейчас читать ))

ЦитатаСообщение от zmanz Посмотреть сообщение

А как посмотреть куда идет запрос при отправке формы данных? Я так понимаю мне нужно там авторизоваться и посмотреть куку?
Ну а что такое CURL буду сейчас читать ))

Открой браузер хром. Открой страницу авторизации. Нажми F12. Перейди на вкладку «network». Поставь галочку «preserve log». Нажми кнопку «record network log». Введи логи и пароль. Нажми в браузере кнопку «войти». Потом останови запись лога. Найди post-пакет. Всё.

Теперь надо написать скрипт, который отправит на сервер точно такие же заголовки.

Сделал все как Вы написали, post файлов там много, но я думаю что этот
Что именно нужно отсюда передавать в заголовок. И можно ли как то передать без CURL потому как библиотеку подключать не очень хочется да и надо то мне один раз авторизоваться спарсить цены в файл и все.

Вот нашел код, в него нужно подставить данные из моего скриншота чтобы он заработал, у меня не получается сделать, после отправки правильных заголовков с авторизацией, вот на этой странице должны отображаться цены http://republika-woman.ru/magazin/folder/platya. Помогите пожалуйста подставить так чтобы заработало.

$ch = curl _init(); curl _setopt($ch, CURLOPT_URL, 'http://republika-woman.ru/magazin/folder/platya'); curl _setopt($ch, CURLOPT_HEADER, false); curl _setopt($ch, CURLOPT_RETURNTRANSFER, true); curl _setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); curl _setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); curl _setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); $data = curl _exec($ch); curl _close($ch);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
$url = 'http://republika-woman.ru/magazin/folder/platya'; // URL сайта на котором будем авторизоваться $urlTo = 'http://republika-woman.ru/user'; // URL на которой будем слать POST данные $login = '******'; $pass = '******'; $post = 'mode=login&login='.$login.'&password='.$pass; $ch = curl_init(); // Инициализируем сеанс CURL curl_setopt($ch, CURLOPT_URL, $url); // Заходим на сайт curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Делаем так, чтобы страница не выдавалась сразу в поток, а можно было ее записать в переменную $html = curl_exec($ch); // Имитируем заход на сайт curl_setopt($ch, CURLOPT_URL, $urlTo); // Устанавливаем адрес куда будем слать POST данные curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла curl_setopt($ch, CURLOPT_POST, true); // Говорим, что информация будет отправляться методом POST curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Передаем POST данные curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Иногда бывает, что после отправки данных происходит редирект heaer('Location. '). curl_setopt($ch, CURLOPT_URL, $url); // Этот параметр говорит о то, чтобы мы следовали за ними, а не оставались на месте после отправки данных $html = curl_exec($ch); // Записываем пришедшие данные в переменную curl_close($ch); // Закрываем сеанс работы CURL echo $html; // И вуаля :) Выводим авторизованную страницу

Все получилось авторизоваться на сайте, авторизация находится в переменной $html.
Теперь у меня другая проблема. Есть массив с сылками для парсинга на этот сайт. При переходе по этим ссылкам, он берет контент, но контент этот опять без цен, т.е страница открываются всеравно без авторизации на сайте.
Как сделать так чтобы он открывал эти страницы уже с авторизацией?

$arrURL[] = "http://republika-woman.ru/magazin/product/3902400"; $arrURL[] = "http://republika-woman.ru/magazin/product/3902600"; $arrURL[] = "http://republika-woman.ru/magazin/product/3902800"; for($i=0; $i  $count; $i++) { $contentItem = file_get_contents($arrURL[$i]);

Источник

Как сделать парсер на php с использованием cURL с авторизацией?

он мне выдает всякие кракозябры.
Помогите разобрать на примере приведенного выше сайта, чтобы было все понятно.
Есть подозрения, что он пишет не те куки. Сайт отправляет кукис на главное странице для определения последнего входа на сайт.

FootWork

 'YourLogin', 'PassWord' => 'YourPass' ); curl_setopt(($ch), CURLOPT_POSTFIELDS, $login); $result1 = curl_exec($ch); $url2 ='http://fantasts.ru/forum/index.php?'; curl_setopt($ch, CURLOPT_URL, $url2); curl_setopt($ch, CURLOPT_REFERER, "http://fantasts.ru/forum/index.php?act=Login&CODE=01&CookieDate=1"); curl_setopt($ch, CURLOPT_COOKIEFILE, '/my_cookies.txt'); $result2 = curl_exec($ch); if (curl_errno($ch)) < print curl_error($ch); exit; >else < echo 'LOGIN WAS SUCCESFULL'; echo $result2; >curl_close($ch); ?>

Объясните только, почему когда я ставлю

curl_setopt($ch, CURLOPT_HEADER, 0); // пустые заголовки

Все норм (хотя как он работает без заголовков??)
А если пытаюсь еще больше быть похожим на браузер, т.е. пишу

$header = array ( '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', 'Content-type: application/x-www-form-urlencoded' ); curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

Источник

Читайте также:  Php удалить элемент в строке
Оцените статью