Платформа 8.2.16.362. УТ(10.3.18.1).
Необходимо считать данные с веб-интерфейса для последующего формирования отчёта.
Есть такой код:
В ResponseText получаю код html. Но это страница "Вход в систему". То есть "WinHttp.SetCredentials(Логин,Пароль,0);" не отрабатывает я так полагаю.
Подскажите в чём дело и в каком направлении вообще двигаться,и где можно почитать об этом вообще. Ни разу не работал с этим. Заранее благодарен.
Необходимо считать данные с веб-интерфейса для последующего формирования отчёта.
Есть такой код:
Путь = КаталогВременныхФайлов() + "details.html";
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("GET",Сервер,0);
WinHttp.SetCredentials(Логин,Пароль,0);
WinHttp.send();
ФайлОтвета = Новый ЗаписьТекста(Путь,КодировкаТекста.UTF8);
ФайлОтвета.Записать(WinHttp.ResponseText);
ФайлОтвета.Закрыть();
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.ОткрытьФайл(Путь, "UTF-8");
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
ПоказатьВ ResponseText получаю код html. Но это страница "Вход в систему". То есть "WinHttp.SetCredentials(Логин,Пароль,0);" не отрабатывает я так полагаю.
Подскажите в чём дело и в каком направлении вообще двигаться,и где можно почитать об этом вообще. Ни разу не работал с этим. Заранее благодарен.
По теме из базы знаний
- Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью Rest API сайта. Часть 1. Авторизация
- Загрузка в 1С:БП 3.0 данных из OFD.RU API 2.0
- ФГИС Сатурн. Интерфейс авторизации
- API-first архитектура при разработке сервисов на 1С
- Данные заказов доставок ТК в 1С:УТ11.5 через API транспортных компаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
HTTPСоединение = Новый HTTPСоединение("Адрес", , "Пользователь", "Пароль",,,)//если https то нужно перед ) указать Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено));
HTTPЗапрос = Новый HTTPЗапрос("Сервис с параметрами "); //например /PersonApi/?iin=1111111111111
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Если HTTPОтвет.КодСостояния = 200 Или HTTPОтвет.КодСостояния = 201 Тогда
Ответ = HTTPОтвет.ПолучитьТелоКакСтроку();
КонецЕсли
HTTPЗапрос = Новый HTTPЗапрос("Сервис с параметрами "); //например /PersonApi/?iin=1111111111111
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Если HTTPОтвет.КодСостояния = 200 Или HTTPОтвет.КодСостояния = 201 Тогда
Ответ = HTTPОтвет.ПолучитьТелоКакСтроку();
КонецЕсли
Попытка
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
HTTPСоединение = Новый HTTPСоединение("hckj.bi.em2.oraclecloud.com", 443, , , , , ЗащищенноеСоединение);
HTTPЗапрос = Новый HTTPЗапрос("/xmlpserver/services/ExternalReportWSSService");
HTTPЗапрос.Заголовки.Вставить("Content-Type" , "application/soap+xml;charset=UTF-8");
HTTPЗапрос.Заголовки.Вставить("SOAPAction" , """");
HTTPЗапрос.Заголовки.Вставить("User-Agent" , "Apache-HttpClient/4.1.1 (java 1.5)");
HTTPЗапрос.Заголовки.Вставить("Connection" , "Keep-Alive");
HTTPЗапрос.Заголовки.Вставить("Authorization" , "Basic 321321321321321");
Шаблон =
"<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"">
| <soap:Body>
| <runReport xmlns=""http://xmlns.oracle.com/oxp/service/PublicReportService"">
|<reportRequest>
|<parameterNameValues>
|<item>
|<name>date_time_from</name>
|<values>
| <item>"+Строка(ДатаНачала)+"</item>
|</values>
|</item>
|<item>
|<name>date_time_to</name>
|<values>
|<item>"+Строка(КонецГода(ТекущаяДата()))+"</item>
|</values>
|</item>
|<item>
|<name>bu_ids</name>
|<values>
|<item>"+СписокIDОрганизаций+"</item>
|</values>
|</item>
|</parameterNameValues>
|<attributeFormat>csv</attributeFormat>
|<reportAbsolutePath>/Custom/Services/1C/Report.xdo</reportAbsolutePath>
|<sizeOfDataChunkDownload>-1</sizeOfDataChunkDownload>
|</reportRequest>
|</runReport>
|</soap:Body>
|</soap:Envelope>";
HTTPЗапрос.УстановитьТелоИзСтроки(Шаблон, "utf-8", ИспользованиеByteOrderMark.НеИспользовать);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Если HTTPОтвет.КодСостояния <> 200 Тогда
Комментарий = "Ошибка приема данных из БД Oracle HCM!" + Символы.ПС +"Ошибка подключения к сервису Oracle HCM!";
Отказ = Истина;
Возврат Новый ТаблицаЗначений;
КонецЕсли;
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку("utf-8"), "utf-8");
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
Исключение
Комментарий = "Ошибка приема данных из БД Oracle HCM!" + Символы.ПС +"Ошибка подключения к сервису Oracle HCM! " + Символы.ПС + ОписаниеОшибки();
Отказ = Истина;
Возврат Новый ТаблицаЗначений;
КонецПопытки;
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
HTTPСоединение = Новый HTTPСоединение("hckj.bi.em2.oraclecloud.com", 443, , , , , ЗащищенноеСоединение);
HTTPЗапрос = Новый HTTPЗапрос("/xmlpserver/services/ExternalReportWSSService");
HTTPЗапрос.Заголовки.Вставить("Content-Type" , "application/soap+xml;charset=UTF-8");
HTTPЗапрос.Заголовки.Вставить("SOAPAction" , """");
HTTPЗапрос.Заголовки.Вставить("User-Agent" , "Apache-HttpClient/4.1.1 (java 1.5)");
HTTPЗапрос.Заголовки.Вставить("Connection" , "Keep-Alive");
HTTPЗапрос.Заголовки.Вставить("Authorization" , "Basic 321321321321321");
Шаблон =
"<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"">
| <soap:Body>
| <runReport xmlns=""http://xmlns.oracle.com/oxp/service/PublicReportService"">
|<reportRequest>
|<parameterNameValues>
|<item>
|<name>date_time_from</name>
|<values>
| <item>"+Строка(ДатаНачала)+"</item>
|</values>
|</item>
|<item>
|<name>date_time_to</name>
|<values>
|<item>"+Строка(КонецГода(ТекущаяДата()))+"</item>
|</values>
|</item>
|<item>
|<name>bu_ids</name>
|<values>
|<item>"+СписокIDОрганизаций+"</item>
|</values>
|</item>
|</parameterNameValues>
|<attributeFormat>csv</attributeFormat>
|<reportAbsolutePath>/Custom/Services/1C/Report.xdo</reportAbsolutePath>
|<sizeOfDataChunkDownload>-1</sizeOfDataChunkDownload>
|</reportRequest>
|</runReport>
|</soap:Body>
|</soap:Envelope>";
HTTPЗапрос.УстановитьТелоИзСтроки(Шаблон, "utf-8", ИспользованиеByteOrderMark.НеИспользовать);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Если HTTPОтвет.КодСостояния <> 200 Тогда
Комментарий = "Ошибка приема данных из БД Oracle HCM!" + Символы.ПС +"Ошибка подключения к сервису Oracle HCM!";
Отказ = Истина;
Возврат Новый ТаблицаЗначений;
КонецЕсли;
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку("utf-8"), "utf-8");
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
Исключение
Комментарий = "Ошибка приема данных из БД Oracle HCM!" + Символы.ПС +"Ошибка подключения к сервису Oracle HCM! " + Символы.ПС + ОписаниеОшибки();
Отказ = Истина;
Возврат Новый ТаблицаЗначений;
КонецПопытки;
вот еще статья здесь предлагают сертификаты сайта добавить в файл cacert и использовать http соединение
Вам нужно посмотреть через браузер, через инструменты разработчика, куда оно вообще скачет. Т.е. там будет что-то вроде 301, 301, 200, т.е. он перенаправляет два раза с хттп на хттпс и потом на домашнюю страницу (как пример, не обязаельно ваш случай). И дальше попробовать повторить весь путь здесь же - т.е. получить ссылку на перенаправление, пройти по ней, получить ответ, обработать ответ, получить ссылку на второе перенаправление и т.п. Либо, если перенаправления всегда одни и те же, то взять последний адрес и уже с ним работать. Проще говоря - вы сейчас получили в 1С первый ответ 301. А вам нужно попасть на первый ответ 200, где страница загрузилась и ждёт уже ответа от пользователя.
Второй вариант - попробовать ОтправитьДляОбработки(Запрос, Файл, Логин, Пароль), кажется так. В документации этого нет, но как-то так, кажется, работало.
Второй вариант - попробовать ОтправитьДляОбработки(Запрос, Файл, Логин, Пароль), кажется так. В документации этого нет, но как-то так, кажется, работало.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот