Имя: Пароль:
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) Возьми отладчик, пожалуйста. Запусти. Поставь точку останова на анализе ответа сайта. Проверь. Не фантазируй.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn