|
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) Возьми отладчик, пожалуйста. Запусти. Поставь точку останова на анализе ответа сайта. Проверь. Не фантазируй.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |