Авторизация на сайте в фоновом режиме.

1. 19.10.21 13:58 Сейчас в теме
Добрый день
Надо пройти авторизацию на сайте и получить необходимую информацию в фоновом режиме.
Просмотрел два варианта:


1-вариант:
//Для начала инициализация
  WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); //WinHttpRequest
  
  WinHttp.Open("POST", "https://crm.etm-system.com/home", Ложь);
  WinHttp.SetRequestHeader("Connection", "keep-alive"); 
  WinHttp.SetRequestHeader("Host", "crm.etm-system.com");
  WinHttp.SetRequestHeader("Content-Type", "text/html;charset=utf-8");
  WinHttp.send("{""login"":""login"",""password"":""password""}");
  //WinHttp.SetCredentials(Логин,Пароль,0);
  //WinHttp.Send();     
  //WinHttp.Send("login="+Логин+"&password="+Пароль+""); 
  Если WinHttp.Status = 200 Тогда
    Сообщить(WinHttp.ResponseText);
  Иначе
    Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText);
    Возврат;
  КонецЕсли;
Показать


2-вариант:

Сервер  = "crm.etm-system.com";
  Порт   = 443;
  Пользователь  = Логин;
  
  ЗаголовокHTTP = Новый Соответствие();
  ЗаголовокHTTP.Вставить("login", Логин);
  ЗаголовокHTTP.Вставить("password", Пароль);
  ЗаголовокHTTP.Вставить("Content-Type", "text/html;charset=utf-8");
  
  Ресурс = "/home";                                    
  HTTPСоединение = Новый HTTPСоединение(Сервер,Порт,,,,, Новый ЗащищенноеСоединениеOpenSSL()); 
  //HTTPСоединение1 = Новый HTTPСоединение(Сервер,Порт,Логин,Пароль,,, Новый ЗащищенноеСоединениеOpenSSL()); 
  HTTPЗапрос     = Новый HTTPЗапрос(Ресурс, ЗаголовокHTTP);
    
  Результат = HTTPСоединение.Получить(HTTPЗапрос);
  ТекстОтвета    = Результат.ПолучитьТелоКакСтроку();
  
или

  ЗаголовокHTTP = Новый Соответствие();
  ЗаголовокHTTP .Вставить("Content-Type", "text/html;charset=utf-8");
    
  HTTPЗапрос = Новый HTTPЗапрос(Ресурс, ЗаголовокHTTP);
  HTTPЗапрос.УстановитьТелоИзСтроки("&login=" + Логин + "&password=" + Пароль, КодировкаТекста.UTF8);
  Результат = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);   
    ТекстОтвета    = Результат.ПолучитьТелоКакСтроку(); 
Показать


Оба ответа одинаковы: возвращает только главную страницу, не прошла авторизацию.

Подскажите, пожалуйста, что делаю не так.
Спасибо
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. Release 19.10.21 14:20 Сейчас в теме
(1)
Подскажите, пожалуйста, что делаю не так.

Пытаться что-то делать не разобравшись в методе авторизации и есть "не так".
В первую очередь нужно понять, как правильно авторизироваться. Хотя бы через браузер, но по хорошему надо узнавать у ТП ресурса, чтобы потом не забанили за подозрительные действия.

Из того, что я увидел:
- адрес ресурса авторизации "/login", а не "/home".
- через форму авторизации на указанном сайте выполняется post-запрос с телом:login=MyLogin&password=MyPassword
- идет ли какая ещё дополнительная проверка, например по "Referer", мне неизвестно.
user1100105; +1 Ответить
14. user1100105 09.11.21 05:20 Сейчас в теме
(3)
Пытаться что-то делать не разобравшись в методе авторизации и есть "не так".


Спасибо, в самом деле это так.
и спасибо за советы
не забанили за подозрительные действия
,
дополнительная проверка, например по "Referer"


Во многом разобрался (хотя пока проблему не решил)
4. Sergey_Borisovi4 52 19.10.21 15:01 Сейчас в теме
(1) Используя сниффер, например, Fiddler2, сравни запросы к сайту, которые шлет для авторизации твой код и обычный браузер.
Сравни УРЛы, на которые шлет параметры обработка и браузер, сравни отправляемые параметры.
user1100105; +1 Ответить
5. Release 19.10.21 15:11 Сейчас в теме
(4) У большинства браузеров есть встроенный сниффер в "Инструментах веб-разработчика" ("Средствах разработчика" и т.п., где как называются). Зачем отдельный?
15. user1100105 09.11.21 05:35 Сейчас в теме
(4)(4) Установил Fiddler, не понял ничего в начале, как получить нужные параметры.
Но ваш совет был верным!
Спасибо большое!
Пока не удался решить проблему, но много полезного узнал
Сравни УРЛы, на которые шлет параметры обработка и браузер, сравни отправляемые параметры.
2. a30v 19.10.21 14:17 Сейчас в теме
Ресурс = "/login"; POST запрос, в теле запроса login=test&password=pass
6. user1100105 19.10.21 15:28 Сейчас в теме
(2) на таком варианте код статуса 301 (WinHttp.Status),
НовыйАдрес = Результат.Заголовки.Получить("Location");

а перенаправляющий ресурс /home.

Я попробовал войти через поле HTML. Видимо JS не включен, страница загружается с ошибками и многие функция не работают (надо признаться, я с вебом практически не работал). Из-за этого, на дальнейшие посты не реагирует.
7. starik-2005 2542 20.10.21 12:07 Сейчас в теме
(6)
код статуса 301
Тебя перенаправляют на другую страницу, вот туды и иди.
9. user1100105 20.10.21 18:51 Сейчас в теме
(7) да нет.
я отметил, что перенаправляется в страницу /home - это главная страница.
8. Sashares 19 20.10.21 12:45 Сейчас в теме
(6)301 - значит после авторизации выполняется переадресация на другую страницу.
Чтобы после авторизации открывать другие страницы сайта, надо получать куки из ответа авторизации (заголовок "Set-Cookie" или "set-cookie") и устанавливать их в заголовки (в "Cookie") при следующем обращении.
user1100105; +1 Ответить
10. user1100105 20.10.21 18:56 Сейчас в теме
(8) после авторизации сайт должен перейти на другую страницу, а не /home. Попробую как вы отметили.
11. Sashares 19 20.10.21 19:30 Сейчас в теме
(10) /home это видимо адрес по умолчанию, на который выполняется переадресация после авторизации. Можете не переходить на нее, а переходить на нужную.
12. user1100105 20.10.21 19:40 Сейчас в теме
13. user1100105 22.10.21 07:06 Сейчас в теме
К сожалению, с таким все равно не смог пройти авторизацию.
А если открыть сайта с использованием поле HTML, все гладко, кроме IE7 (даже IE11 полностью) не поддерживает JS в "встроенным браузере":
	ВебСтраница = "https://crm.etm-system.com/home";
	Попытка
	    ЭлементыФормы.ВебСтраница.Перейти(ВебСтраница);
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;

	//Через некоторое время
	document = ЭлементыФормы.ВебСтраница.Документ;
	    
	// Устанавливаем логин и пароль в поля ввода
	document.querySelector("input[name=""" + "login" + """]").value = Логин;
	document.querySelector("input[name=""" + "password" + """]").value = Пароль;
	document.querySelector("input[type=""" + "submit" + """]").Click();
Показать


Так можно пройти авторизацию, но сайт полностью не загружается (т.е. так работать невозможно).

/home это видимо адрес по умолчанию, на который выполняется переадресация после авторизации. Можете не переходить на нее, а переходить на нужную.


А после авторизации, оказывается переходить на ресурс "/main".
Внутри кода страницы, я не мог найти поле "Cookie", а также не знаю откуда получить параметры "Referer".
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Севастополь
зарплата от 150 000 руб. до 200 000 руб.
Полный день

Программист 1С
Москва
зарплата от 120 000 руб.
Полный день

Ведущий программист-консультант 1С (УХ)
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день

Программист 1С (розница)
Москва
зарплата от 160 000 руб. до 160 000 руб.
Полный день