Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Переход по страницам cURL

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

koreets2011



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.
Помогите разобраться.
 

Код:
 
    $cookie_box = dirname(__FILE__).'/cookies/'.$login.'_gettpartner_cookie.txt';
    // Авторизовываемся
    $common_gett = curl_init('http://gettpartner.ru/');
    curl_setopt($common_gett, CURLOPT_REFERER, 'http://gettpartner.ru/');
    curl_setopt($common_gett, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($common_gett, CURLOPT_POST, 1);
    curl_setopt($common_gett, CURLOPT_POSTFIELDS,"_token=$token&email=$login&password=$pass");
    curl_setopt($common_gett, CURLOPT_HEADER, 1);
    curl_setopt($common_gett, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
    curl_setopt($common_gett, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($common_gett, CURLOPT_COOKIEJAR, $cookie_box);
    curl_setopt($common_gett, CURLOPT_COOKIEFILE, $cookie_box);
    curl_setopt($common_gett, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($common_gett, CURLOPT_HTTPHEADER, array('Expect:'));
    $html = curl_exec($common_gett);
    // Смотрим $html и видим, что авторизация прошла успешно
     
    // Переходим на другую страницу
    $common_gett= curl_init('http://gettpartner.ru/fleet/drivers');
    curl_setopt($common_gett, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($common_gett, CURLOPT_REFERER, 'http://gettpartner.ru/');
    curl_setopt($common_gett, CURLOPT_POST, 0);
    curl_setopt($common_gett, CURLOPT_HEADER, 1);
    curl_setopt($common_gett, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
    curl_setopt($common_gett, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($common_gett, CURLOPT_HTTPHEADER, array('Expect:'));
    curl_setopt($common_gett, CURLOPT_COOKIEJAR, $cookie_box);
    curl_setopt($common_gett, CURLOPT_COOKIEFILE, $cookie_box);
    curl_setopt($common_gett, CURLOPT_FOLLOWLOCATION, 1);
    $html2 = curl_exec($common_gett);
    // Смотрим $html2 и видим, что нам снова предлагают авторизоваться
 

 
Авторизация проходит успешно, это я вижу в переменной $html, затем перехожу на другую страницу и мне снова предлагают авторизоваться. В чем дело не пойму

Всего записей: 354 | Зарегистр. 13-10-2011 | Отправлено: 08:01 19-04-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
проверять что записалось и записалось ли в файл с куками.

Всего записей: 6494 | Зарегистр. 20-09-2014 | Отправлено: 08:03 19-04-2018
koreets2011



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Это я конечно проверил, вот что в куках

Код:
 
# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
 
gettpartner.ru    FALSE    /    FALSE    1524121525    XSRF-TOKEN    eyJpdiI6IldJUVFyVytwUDdMbUJZRlI2dGRUbGc9PSIsInZhbHVlIjoiaXJQSTk5WHZnanhJc0ZubFJMVGx3KzRFd0VSenJDYnpzR0hWdmZ4MFZDa2lLVTB4RWdBdzg2cHVmV2M5Y1VtSXFJOFJsWGJ0MU5SVWwxTDdBVlYrSlE9PSIsIm1hYyI6ImU5NGMxNGM4N2Q0MDM0MzFjMWQzNGZhNDUwODQzZTU4YjQ5ZGI4MDU2YWI4MjAxYTRjNTY1ZTk0Y2RiNjhjMjcifQ%3D%3D
#HttpOnly_gettpartner.ru    FALSE    /    FALSE    1524121525    laravel_session    eyJpdiI6InpUakdLUFFGM0dxeVlZN2lEQzJrMnc9PSIsInZhbHVlIjoiMVFTa2ZRMGI1TVwvVEhPN1VPbGF1RkdyMFpTSzdza3pRTXZlWjZZWEU0eGhRNXhBV2lKaUdYVWRJY2s2aVZaSjQ2RUcwaDNmNzYrWEZDelRtZThUajJRPT0iLCJtYWMiOiJiYzQxZGQ1YzMzM2U3YzY4MjhhODI3OGU3MzYzMjI0N2E3ZDU0NmU1NTFlMTg2Njc1MmY5ZGUxMGE2MDBjMDM5In0%3D
 

Всего записей: 354 | Зарегистр. 13-10-2011 | Отправлено: 08:06 19-04-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
вот что в куках  

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

Всего записей: 6494 | Зарегистр. 20-09-2014 | Отправлено: 08:10 19-04-2018
koreets2011



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
В куках браузера имеется PHPSESSID, чего нет в куках cURL.

Всего записей: 354 | Зарегистр. 13-10-2011 | Отправлено: 08:16 19-04-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
В куках браузера имеется PHPSESSID

смотрите куда то не туда. раз используется laravel фреймворк, то phpsessid не будет, сессия, как видно, сидит в laravel_session

Всего записей: 6494 | Зарегистр. 20-09-2014 | Отправлено: 08:17 19-04-2018
koreets2011



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Ну тогда содержимое куков одинаково, я не совсем понял

Всего записей: 354 | Зарегистр. 13-10-2011 | Отправлено: 08:22 19-04-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Ну тогда содержимое куков одинаково, я не совсем понял

ну тогда без доступа никто и ничего вам не скажет, ибо что там делается - иначе не проверить
и да, постинг с самого начала - неправильно. потому что сначала нужно получить csrf куку, она проверяется при отправке формы и часто меняется

Всего записей: 6494 | Зарегистр. 20-09-2014 | Отправлено: 08:23 19-04-2018 | Исправлено: Mavrikii, 08:27 19-04-2018
koreets2011



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доступ сюда
Код:
http://gettpartner.ru
?

Всего записей: 354 | Зарегистр. 13-10-2011 | Отправлено: 08:24 19-04-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Доступ сюда

а сами как думаете?
 

Цитата:
и да, постинг с самого начала - неправильно. потому что сначала нужно получить csrf куку, она проверяется при отправке формы и часто меняется


Всего записей: 6494 | Зарегистр. 20-09-2014 | Отправлено: 08:27 19-04-2018 | Исправлено: Mavrikii, 08:27 19-04-2018
koreets2011



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
В личку скину? Поможете? Просто вряд ли кому еще доверю

Всего записей: 354 | Зарегистр. 13-10-2011 | Отправлено: 08:28 19-04-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Поможете

у меня нет сейчас локально php на ноуте.
поясняю еще раз последовательность.
1) открыть первую страницу, чтобы получить первоначальные куки
2) вытащить из нее токен для формы
3) сабмитнуть форму с токеном и полученными ранее куками
4) продолжать

Всего записей: 6494 | Зарегистр. 20-09-2014 | Отправлено: 08:31 19-04-2018
koreets2011



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
А я так и делаю, разве нет?
Я тут подумал может в заголовок нужно запихать X-CSRF-Token? На странице gettpartner.ru нашел
 

Код:
 
<script>
    $.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}});
    toastr.options = {
        "closeButton": true,
        "newestOnTop": true,
        "positionClass": "toast-bottom-right"
    };
 
</script>
 

 
делаю так

Код:
 
curl_setopt($common_gett, CURLOPT_HTTPHEADER, array('X-CSRF-Token:' .  $token));
 

 
$token 100% верный, результат тот же

Всего записей: 354 | Зарегистр. 13-10-2011 | Отправлено: 08:44 19-04-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
А я так и делаю, разве нет?  

нет, первый запрос - сразу отправка формы.
 

Цитата:
нужно запихать X-CSRF-Token?

это для ajax запросов, которые не генерят данные как из формы.

Всего записей: 6494 | Зарегистр. 20-09-2014 | Отправлено: 08:51 19-04-2018
koreets2011



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот почти полный листинг:

Код:
 
 
    $cookie_box = dirname(__FILE__).'/cookies/'.$login.'_gettpartner_cookie.txt';
 
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_COOKIESESSION, 1);
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_box);
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_box);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_HEADER, true);
    curl_setopt($curl, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
    curl_setopt($curl, CURLOPT_URL, 'http://gettpartner.ru/index.php');
    $h = curl_exec($curl);
    $a = explode('name="_token" value="', $h);
    $b = explode('">', $a[1]);
    $token = $b[0];
 
    $common_gett = curl_init('http://gettpartner.ru/');
    curl_setopt($common_gett, CURLOPT_COOKIESESSION, 1);
    curl_setopt($common_gett, CURLOPT_REFERER, 'http://gettpartner.ru/');
    curl_setopt($common_gett, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($common_gett, CURLOPT_POST, 1);
    curl_setopt($common_gett, CURLOPT_POSTFIELDS,"_token=$token&email=$login&password=$pass");
    curl_setopt($common_gett, CURLOPT_HEADER, 1);
    curl_setopt($common_gett, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
    curl_setopt($common_gett, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($common_gett, CURLOPT_COOKIEJAR, $cookie_box);
    curl_setopt($common_gett, CURLOPT_COOKIEFILE, $cookie_box);
    curl_setopt($common_gett, CURLOPT_FOLLOWLOCATION, 1);
    $h = curl_exec($common_gett);
 
    $common_gett = curl_init('http://gettpartner.ru/fleet/drivers');
    curl_setopt($common_gett, CURLOPT_COOKIESESSION, 1);
    curl_setopt($common_gett, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($common_gett, CURLOPT_REFERER, 'http://gettpartner.ru/');
    curl_setopt($common_gett, CURLOPT_POST, 0);
    curl_setopt($common_gett, CURLOPT_HEADER, 1);
    curl_setopt($common_gett, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
    curl_setopt($common_gett, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($common_gett, CURLOPT_COOKIEJAR, $cookie_box);
    curl_setopt($common_gett, CURLOPT_COOKIEFILE, $cookie_box);
    curl_setopt($common_gett, CURLOPT_FOLLOWLOCATION, 1);
    $html = curl_exec($common_gett);
 
 

 
Добавлено:
В общем я *****, вынужден признать. Нашел опечатку в коде. Её подправил и все заработало.

Всего записей: 354 | Зарегистр. 13-10-2011 | Отправлено: 08:57 19-04-2018 | Исправлено: koreets2011, 09:03 19-04-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
тогда нужно смотреть и сравнивать с браузером.  
 
и неужели там нет API?

Всего записей: 6494 | Зарегистр. 20-09-2014 | Отправлено: 09:09 19-04-2018
koreets2011



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Теперь вопрос, как скачать файл? он отдаётся по ссылке http://gettpartner.ru/fleet/drivers/export

Код:
 
file_put_contents(dirname(__FILE__).'/temp/driverGett.xls', 'http://gettpartner.ru/fleet/drivers/export');
 

 
Это не сработало (((
 
Добавлено:
Mavrikii
Какое API, я Вас умоляю. У Яндекс.Такси нет API, сидишь по 3000 строк кода строчишь, что бы хоть как то автоматизировать процесс работы.  
Теперь вот Gett решил обновить кабинет, что внесло гемора.

Всего записей: 354 | Зарегистр. 13-10-2011 | Отправлено: 09:11 19-04-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Это не сработало

и не сработает, оно не использует куки от curl. так же, как и страницу в первом запросе.
более того, второй аргумент функции - строка, в данном случае она выглядит как URL.

Всего записей: 6494 | Зарегистр. 20-09-2014 | Отправлено: 09:14 19-04-2018
koreets2011



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему тогда вот так тоже не работает?

Код:
 
$common_gett = curl_init('http://gettpartner.ru/fleet/drivers/export');
    curl_setopt($common_gett, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($common_gett, CURLOPT_REFERER, 'http://gettpartner.ru/');
    curl_setopt($common_gett, CURLOPT_POST, 0);
    curl_setopt($common_gett, CURLOPT_HEADER, 0);
    curl_setopt($common_gett, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
    curl_setopt($common_gett, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($common_gett, CURLOPT_COOKIEJAR, $cookie_box);
    curl_setopt($common_gett, CURLOPT_COOKIEFILE, $cookie_box);
    curl_setopt($common_gett, CURLOPT_FOLLOWLOCATION, 1);
    $excel_file= curl_exec($common_gett);
 
    file_put_contents(dirname(__FILE__).'/temp/driverGett.xls', $excel_file);
 

 
в $excel_file точно содержимое файла, это хорошо видно

Всего записей: 354 | Зарегистр. 13-10-2011 | Отправлено: 09:21 19-04-2018
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Почему тогда вот так тоже не работает?


Цитата:
это хорошо видно

хорошо видно чем? заголовки ответа сервера там же?
 

Цитата:
curl_setopt($common_gett, CURLOPT_RETURNTRANSFER, 0);  

выставить в 1

Всего записей: 6494 | Зарегистр. 20-09-2014 | Отправлено: 09:26 19-04-2018 | Исправлено: Mavrikii, 09:26 19-04-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Переход по страницам cURL

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru