Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

HTTPСоединение авторизация

HTTPСоединение авторизация
Я
   flcy
 
11.07.20 - 23:27
Доброго времени суток!
Пытаюсь реализовать HTTPЗапрос к сайту https://aspro.ru/auth/.
Задача, если логин, пароль верный то основная форма открывается или же нет.
Добавил ФормуAuth, и в событии ПриОткрытии, пытаюсь сделать HTTPСоедиение
&НаКлиенте
Процедура Вход()
    Соединение = Новый HTTPСоединение("aspro.ru",,,,,,
        Новый ЗащищенноеСоединениеOpenSSL());        
    Запрос = Новый HTTPЗапрос("/auth");
    Результат = Соединение.Получить(Запрос);

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

    Сообщить(ИдентификаторСессии1);

    Перенаправление = Результат.Заголовки.Получить("Location");

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

    Соединение = Новый HTTPСоединение(URI.Хост, URI.Порт,,,,,
        Новый ЗащищенноеСоединениеOpenSSL());
    Запрос = Новый HTTPЗапрос(URI.ПутьНаСервере);    
    Результат =  Соединение.Получить(Запрос);

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

    Сообщить(ИдентификаторСессии2);    

    USER_LOGIN = "";
    USER_PASSWORD = "";
    Login = "";

    Текст = Новый ТекстовыйДокумент;
    Текст.УстановитьТекст(Результат.ПолучитьТелоКакСтроку());
    Для Индекс = 0 По Текст.КоличествоСтрок() Цикл
        Строка = Текст.ПолучитьСТроку(Индекс);
        Если Найти(Строка, " id="USER_LOGIN" = "") > 0 Тогда
            USER_LOGIN = ВытащитьЗначениеИзСтроки(Строка);
        ИначеЕсли Найти(Строка, "name="USER_PASSWORD" = "") > 0 Тогда
            USER_PASSWORD = ВытащитьЗначениеИзСтроки(Строка);
        ИначеЕсли Найти(Строка, "name="Login" = "") > 0 Тогда
            Login = ВытащитьЗначениеИзСтроки(Строка);
        КонецЕсли;
    КонецЦикла;

    Сообщить(USER_LOGIN);
    Сообщить(USER_PASSWORD);
    Сообщить(Login);    
Логин = Элементы.Логин;  
Пароль = Элементы.Пароль
    
Логин = "";
Пароль = "";

    Если Логин = "" Или Пароль = "" Тогда
        Сообщить("Для продолжения укажите в коде логин и пароль");
        Возврат;
    КонецЕсли;

    Ресурс = "/auth;" + ИдентификаторСессии2 +
    ИдентификаторСессии1;

    Соединение = Новый HTTPСоединение("aspro.ru",,,,,,
        Новый ЗащищенноеСоединениеOpenSSL());

    Заголовки = Новый Соответствие;    
    Заголовки.Вставить("Cookie", ИдентификаторСессии2);
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded;");    

    Запрос = Новый HTTPЗапрос(Ресурс, Заголовки);
    Запрос.УстановитьТелоИзСтроки(КодПриглашения);

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

    Сообщить("Нам вернули код " + Результат.КодСостояния);
    Перенаправление = Результат.Заголовки.Получить("Location");
    Сообщить("И перенаправили на " + Перенаправление);

    URI = СтруктураURI(Перенаправление);

    Соединение = Новый HTTPСоединение(URI.Хост, URI.Порт,,,,,
        Новый ЗащищенноеСоединениеOpenSSL());

    Заголовки = Новый Соответствие;    
    Заголовки.Вставить("Cookie", ИдентификаторСессии1);    

    Запрос = Новый HTTPЗапрос(URI.ПутьНаСервере, Заголовки);
    Результат =  Соединение.Получить(Запрос);    

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

&НаКлиенте
Функция СтруктураURI(Знач СтрокаURI) Экспорт

    СтрокаURI = СокрЛП(СтрокаURI);

    Схема = "";
    Позиция = Найти(СтрокаURI, "://");
    Если Позиция > 0 Тогда
        Схема = НРег(Лев(СтрокаURI, Позиция - 1));
        СтрокаURI = Сред(СтрокаURI, Позиция + 3);
    КонецЕсли;

    СтрокаСоединения = СтрокаURI;
    ПутьНаСервере = "";
    Позиция = Найти(СтрокаСоединения, "/");
    Если Позиция > 0 Тогда
        ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1);
        СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1);
    КонецЕсли;

    СтрокаАвторизации = "";
    ИмяСервера = СтрокаСоединения;
    Позиция = Найти(СтрокаСоединения, "@");
    Если Позиция > 0 Тогда
        СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1);
        ИмяСервера = Сред(СтрокаСоединения, Позиция + 1);
    КонецЕсли;
    Логин = СтрокаАвторизации;
    Пароль = "";
    Позиция = Найти(СтрокаАвторизации, ":");
    Если Позиция > 0 Тогда
        Логин = Лев(СтрокаАвторизации, Позиция - 1);
        Пароль = Сред(СтрокаАвторизации, Позиция + 1);
    КонецЕсли;

    Хост = ИмяСервера;
    Порт = "";
    Позиция = Найти(ИмяСервера, ":");
    Если Позиция > 0 Тогда
        Хост = Лев(ИмяСервера, Позиция - 1);
        Порт = Сред(ИмяСервера, Позиция + 1);
    КонецЕсли;

    Результат = Новый Структура;
    Результат.Вставить("Схема", Схема);
    Результат.Вставить("Логин", Логин);
    Результат.Вставить("Пароль", Пароль);
    Результат.Вставить("ИмяСервера", ИмяСервера);
    Результат.Вставить("Хост", Хост);
    Результат.Вставить("Порт", ?(Порт <> "", Число(Порт), Неопределено));
    Результат.Вставить("ПутьНаСервере", ПутьНаСервере);

    Возврат Результат;

КонецФункции

&НаКлиенте
Функция ВытащитьЗначениеИзСтроки(Строка)

    Позиция2 = СтрДлина(Строка);
    Пока Позиция2 > 1 Цикл
        Если Сред(Строка, Позиция2, 1) = """" Тогда
            Прервать;
        КонецЕсли;
        Позиция2 = Позиция2 - 1;
    КонецЦикла;

    Позиция1 = Позиция2 - 1;
    Пока Позиция1 > 1 Цикл
        Если Сред(Строка, Позиция1, 1) = """" Тогда
            Прервать;
        КонецЕсли;
        Позиция1 = Позиция1 - 1;
    КонецЦикла;

    Возврат Сред(Строка, Позиция1 + 1, Позиция2 - Позиция1 - 1);

КонецФункции
   flcy
 
1 - 11.07.20 - 23:28
Нет ответа от сервера..
   Ёпрст
 
2 - 11.07.20 - 23:31
(0) порт укажи явно
   flcy
 
3 - 12.07.20 - 09:22
(2) добавил порт 443, тоже самое
   acht
 
4 - 12.07.20 - 11:07
(1) Откуда увереннось в наличии перенаправления?
   flcy
 
5 - 12.07.20 - 11:49
(4) Перенаправление в случае успешной авторизации
   acht
 
6 - 12.07.20 - 11:54
(5) Возьми отладчик, пожалуйста. Запусти. Поставь точку останова на анализе ответа сайта. Проверь. Не фантазируй.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.