WinHttp.WinHttpRequest.5.1 и HTTPS
Есть розница доработанная которая работает под 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Строка(Новый ДвоичныеДанные(ИмяОченьВременногоФайла));
Попытка
УдалитьФайлы(ИмяОченьВременногоФайла);
Исключение
Возврат СтрокаКодирования;
КонецПопытки;
Возврат ЗакодированнаяСтрока;
КонецФункции
Под 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Строка(Новый ДвоичныеДанные(ИмяОченьВременногоФайла));
Попытка
УдалитьФайлы(ИмяОченьВременногоФайла);
Исключение
Возврат СтрокаКодирования;
КонецПопытки;
Возврат ЗакодированнаяСтрока;
КонецФункции
По теме из базы знаний
- Подключение фискального регистратора MG N707TS, MG-T777TL, MG-T787TL по http (TCP/IP) протоколу JSON
- Параллельные HTTP-запросы
- Проверка информации из базы транспорта на сайте https://check1.fsrar.ru
- Отправка данных в SPOT 2d посредством http запросов в 1С 8.3 УФ (без curl)
- Загрузка курсов валют для РБ (Мисофт) с https
Найденные решения
Прошу!
Надеюсь поможет!
Надеюсь поможет!
Процедура Старт()
Попытка
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;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Здравствуйте ! я в http не очень, но помочь хочется ))
в случае, если сайтhttps://www.sunsolo.ru/customerxml требует пароля, то это требование не обойти.
попробуйте WinHttpSetCredentials
источникhttps://msdn.microsoft.com/en-us/library/windows/desktop/aa384112%28v=VS.85%29.aspx
??
При доступе из 83 указываете пароль с таким-же шифрованием ?
в случае, если сайт
попробуйте WinHttpSetCredentials
источник
??
При доступе из 83 указываете пароль с таким-же шифрованием ?
загуглил по словам "WinHttp.WinHttpRequest пароль"
Два дня поиска решения в Интернет привели к выводу использовать COMОбъект WinHttpRequest. Я уж было обрадовался, что раздобыл такой интереснейший инструментик, но и тут меня ожидал сюрприз: не все сайты поддерживают свойство этого объекта SetCredentials.
Суть в том, что сервер должен запросить авторизацию и только тогда свойство SetCredentials(ИмяПользователя, Пароль, 0) сработает.
но это Вы можете и сами и лучше ))
Два дня поиска решения в Интернет привели к выводу использовать COMОбъект WinHttpRequest. Я уж было обрадовался, что раздобыл такой интереснейший инструментик, но и тут меня ожидал сюрприз: не все сайты поддерживают свойство этого объекта SetCredentials.
Суть в том, что сервер должен запросить авторизацию и только тогда свойство SetCredentials(ИмяПользователя, Пароль, 0) сработает.
но это Вы можете и сами и лучше ))
Прошу!
Надеюсь поможет!
Надеюсь поможет!
Процедура Старт()
Попытка
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;
КонецФункции
Показать
Коллеги большое спасибо! Вы меня своим спором поставили в тупик. По сути проблемы оказались правы оба, но если подходить формально, то я написал, что "Кто сделает рабочий код получит вознаграждение". А код выдал Paul Lebedinskiy, а Николай Васильев дал ответ раньше. Как быть?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот