Версия для печати темы (http://pro1c.org.ua/index.php?s=bdf9d4923fd2d476394b30c725ef2bad&showtopic=50852)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Авторизация на стороннем сайте и парсинг его страницы

Автор: ivan.kh 06.03.19, 11:12

Добрый день.
1С:Предприятие 8.3 (8.3.10.2580)
Есть сайт www.agrochart.com
После авторизации на нем будут доступны определенные страницы с аналитикой.
Хочу подгружать в базу эту аналитику, но не выходит.
Посмотрел через браузер, то процесс там выглядит так:
1. При переходе на страницу авторизации получаем уникальный token, назовем его token1
2. Потом post запросом передаем логин, пароль и в КУКИ запихиваем этот token1
3. В результате авторизации должны получить SessionId и новый token по которым можем дальше "ходить" по страницам.

Не могу понять, что именно делаю не так, но ошибки после отправки post нет (получаю код 301, хотя по логике должен быть 302), но вот SessionId и новый token не приходят.
Код под спойлером


Процедура КнопкаВыполнитьНажатие(Кнопка)    
    
    Сервер = "www.agrochart.com";
    Ресурс = "/en/users/login/";    

    Логин  = "test06032019@gmail.com";
    Пароль = "Qq123456";

    // Подключаемся к сайту.
    Соединение = Новый HTTPСоединение(Сервер, 443, , , , ,
      Новый ЗащищенноеСоединениеOpenSSL()
    );
    
    Запрос = Новый HTTPЗапрос(Ресурс);

    Результат = Соединение.Получить(Запрос);

    // В куках нам должны вернуть идентификатор сессии.
    Куки = Результат.Заголовки.Получить("Set-Cookie");
    Куки = СтрЗаменить(Куки, ";", Символы.ПС);
    ИдентификаторСессии1 =  Сред(СтрПолучитьСтроку(Куки, 1),11);    

    //Сообщить("Тело результата: " + Результат.ПолучитьТелоКакСтроку());
        
    Сообщить(ИдентификаторСессии1);
    Сообщить("Код возврата " + Результат.КодСостояния);    
    КодПриглашения = "next=" +
        "&email=" + Логин +
        "&password=" + Пароль +
        "&csrfmiddlewaretoken=" + ИдентификаторСессии1;    

    Запрос = Новый HTTPЗапрос();
    Запрос.Заголовки.Вставить("Referer","https://www.agrochart.com/en/users/login/");
    Запрос.Заголовки.Вставить("Cookie","csrftoken="+ИдентификаторСессии1);
    Запрос.УстановитьТелоИзСтроки(КодПриглашения, "ISO-8859-1");
    //Сообщить(Запрос.ПолучитьТелоКакСтроку());

    Результат = Соединение.ОтправитьДляОбработки(Запрос);

    Сообщить("Нам вернули код " + Результат.КодСостояния);      
    
КонецПроцедуры

Автор: Petre 06.03.19, 12:40

Попробуйте с помощью fiddler сравнить запросы и ответы.

Автор: ivan.kh 06.03.19, 14:15

Petre @ Сегодня, 12:40 * ,
Да и fiddler смотрел, понять в чем загвоздка не вышло.

Автор: Petre 06.03.19, 14:52

Т. е. запросы и ответы и при работе в браузере, и при работе из 1с одинаковы?

Автор: ivan.kh 06.03.19, 16:34

Petre @ Сегодня, 14:52 * ,
Не совсем, я там только разобрался как проверить правильно ли я token1 выбрал, дальше в fiddler'e запутался и смотрел только через браузер.

Автор: ivan.kh 14.03.19, 11:33

В итоге сделал все так:
- создал парсер на python, который логинится на сайте, парсит нужные страницы и сохраняет результат в csw
- в 1С регламентным заданием затягиваю csv.

Если кому нужен по этому сайту парсер, пишите в ЛС - скину.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
http://pro1c.org.ua