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

1. user1100105 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 95 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 3033 20.10.21 12:07 Сейчас в теме
(6)
код статуса 301
Тебя перенаправляют на другую страницу, вот туды и иди.
9. user1100105 20.10.21 18:51 Сейчас в теме
(7) да нет.
я отметил, что перенаправляется в страницу /home - это главная страница.
8. Sashares 34 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 34 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С аналитик
Москва
зарплата от 210 000 руб.
Полный день

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

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

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)