Имя: Пароль:
1C
1С v8
HTTPСоединение авторизация
0 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);

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