WinHttp.WinHttpRequest.5.1 и HTTPS

1. shusharu 05.04.18 14:16 Сейчас в теме
Есть розница доработанная которая работает под 8.1. Сейчас встала задача получать с сайта информацию зарегистрирован клиента или нет. Сайт работает по HTTPS.
Под 8.3 штатными средствами удалось получать данные, а под 8.1 никак. Хотя вроде в СП написано что есть защищенное соединение. Борьба с прописыванием сертификатов ничего не дала. Всегда возвращается пустой файл. Переход на 8.3 это целый проект, на который клиент не готов пойти.
Решил посмотреть в сторону WinHttp.WinHttpRequest.5.1
Набросал код, но все равно не получается получить данные. Ошибка <h1>401 Unauthorized</h1>. Не проходит авторизацию. Не могу понять, то ли я не правильно кодирую логин и пароль, то ли сам метод не правильно запускаю.
Кто сделает рабочий код получит вознаграждение.

Кусок кода нарыл на этом форуме и сделал что-то подобное.
Процедура СделатьЗапрос()
Попытка
WinHttp=Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("GET", "https://www.sunsolo.ru/customerxml/index/index/phone/9218524141/",0);
WinHttp.SetRequestHeader("Authorization"," Basic " + Кодировать(СокрЛП(Логин) + ":" + СокрЛП(Пароль)));
WinHttp.Send();
РезультатСтр = WinHttp.ResponseText();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры

Функция Кодировать(СтрокаКодирования)
Кодировка = "windows-1251";
ИмяОченьВременногоФайла = ПолучитьИмяВременногоФайла();

ТекстДок=Новый ТекстовыйДокумент;
ТекстДок.ДобавитьСтроку(СтрокаКодирования);
ТекстДок.Записать(ИмяОченьВременногоФайла);


//ЗаписьТекста = Новый ЗаписьТекста(ИмяОченьВременногоФайла);//, СокрЛП(Кодировка));
//ЗаписьТекста.Записать(СтрокаКодирования);
//ЗаписьТекста.Закрыть();
ЗакодированнаяСтрока = Base64Строка(Новый ДвоичныеДанные(ИмяОченьВременногоФайла));

Попытка
УдалитьФайлы(ИмяОченьВременногоФайла);
Исключение
Возврат СтрокаКодирования;
КонецПопытки;

Возврат ЗакодированнаяСтрока;

КонецФункции
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
4. plebedinskiy 51 05.04.18 14:38 Сейчас в теме +1 $m
Прошу!
Надеюсь поможет!

Процедура Старт()
      Попытка
		WinHttp = ОписаниеСервиса();
		ТекстСообщения = "Log=LogMessage=" + ТЗстрокой;
		WinHttp.Send("whttplog" + ТекстСообщения);	
		Если WinHttp.Status = 200 Тогда
				
		КонецЕсли;
	Исключение
	КонецПопытки;
	
КонецПроцедуры

Функция ОписаниеСервиса()


	СерверABC = "10.20.0.31";
        Ресурс = "/ABC/hs/Test/";
	WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
	WinHttp.Option(2,"Windows-1251"); 
	WinHttp.Open("POST", "http://" + СерверABC + Ресурс, 0);
	WinHttp.SetCredentials("Admin","123456",0);
	Возврат WinHttp;
КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. plebedinskiy 51 05.04.18 16:14 Сейчас в теме
(1) Кстати, коллега напомнил сейчас, что очень важно, чтобы там был логин на английском, иначе не взлетит.
2. vasilev2015 2737 05.04.18 14:32 Сейчас в теме
Здравствуйте ! я в http не очень, но помочь хочется ))
в случае, если сайт https://www.sunsolo.ru/customerxml требует пароля, то это требование не обойти.
попробуйте WinHttpSetCredentials
источник https://msdn.microsoft.com/en-us/library/windows/desktop/aa384112%28v=VS.85%29.aspx

??

При доступе из 83 указываете пароль с таким-же шифрованием ?
3. vasilev2015 2737 05.04.18 14:35 Сейчас в теме +1 $m
загуглил по словам "WinHttp.WinHttpRequest пароль"

Два дня поиска решения в Интернет привели к выводу использовать COMОбъект WinHttpRequest. Я уж было обрадовался, что раздобыл такой интереснейший инструментик, но и тут меня ожидал сюрприз: не все сайты поддерживают свойство этого объекта SetCredentials.
Суть в том, что сервер должен запросить авторизацию и только тогда свойство SetCredentials(ИмяПользователя, Пароль, 0) сработает.

но это Вы можете и сами и лучше ))
4. plebedinskiy 51 05.04.18 14:38 Сейчас в теме +1 $m
Прошу!
Надеюсь поможет!

Процедура Старт()
      Попытка
		WinHttp = ОписаниеСервиса();
		ТекстСообщения = "Log=LogMessage=" + ТЗстрокой;
		WinHttp.Send("whttplog" + ТекстСообщения);	
		Если WinHttp.Status = 200 Тогда
				
		КонецЕсли;
	Исключение
	КонецПопытки;
	
КонецПроцедуры

Функция ОписаниеСервиса()


	СерверABC = "10.20.0.31";
        Ресурс = "/ABC/hs/Test/";
	WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
	WinHttp.Option(2,"Windows-1251"); 
	WinHttp.Open("POST", "http://" + СерверABC + Ресурс, 0);
	WinHttp.SetCredentials("Admin","123456",0);
	Возврат WinHttp;
КонецФункции
Показать
5. vasilev2015 2737 05.04.18 15:08 Сейчас в теме
(4) про SetCredentials я написал на три минуты раньше ))
6. plebedinskiy 51 05.04.18 15:49 Сейчас в теме
(5) Ага, пока я искал у себя кусок рабочего кода)))
12. johnnyshut23 74 30.04.18 21:57 Сейчас в теме
(4)помогло мне, спасибо!
8. shusharu 06.04.18 11:43 Сейчас в теме
Коллеги большое спасибо! Вы меня своим спором поставили в тупик. По сути проблемы оказались правы оба, но если подходить формально, то я написал, что "Кто сделает рабочий код получит вознаграждение". А код выдал Paul Lebedinskiy, а Николай Васильев дал ответ раньше. Как быть?
9. shusharu 06.04.18 13:39 Сейчас в теме
Поскольку никто не отозвался, поступил на свое усмотрение. Разделил вознаграждение.
10. vasilev2015 2737 06.04.18 15:40 Сейчас в теме
(9) я не против любого решения. Все по фану. Даже сказал бы, что Лебединский - лучше. ))
11. plebedinskiy 51 06.04.18 16:22 Сейчас в теме
(9) Победила дружба)) И всеобщий профит! В свое время повоевали именно с этой авторизацией, так что я рад, что удалось этим кодом поделиться!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот