Авторизация API из 1с.

1. Intercititude 06.03.20 10:53 Сейчас в теме
Платформа 8.2.16.362. УТ(10.3.18.1).

Необходимо считать данные с веб-интерфейса для последующего формирования отчёта.
Есть такой код:
    Путь = КаталогВременныхФайлов() + "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);" не отрабатывает я так полагаю.

Подскажите в чём дело и в каком направлении вообще двигаться,и где можно почитать об этом вообще. Ни разу не работал с этим. Заранее благодарен.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Aitbay 06.03.20 11:01 Сейчас в теме
HTTPСоединение = Новый HTTPСоединение("Адрес", , "Пользователь", "Пароль",,,)//если https то нужно перед ) указать Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено));

HTTPЗапрос = Новый HTTPЗапрос("Сервис с параметрами "); //например /PersonApi/?iin=1111111111111
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Если HTTPОтвет.КодСостояния = 200 Или HTTPОтвет.КодСостояния = 201 Тогда
Ответ = HTTPОтвет.ПолучитьТелоКакСтроку();
КонецЕсли
4. Intercititude 06.03.20 11:11 Сейчас в теме
(2) Платформа посмотрите. Изначально так и пытался. Сталкивался с ошибкой 301. Вывод,что сайт перенаправляет с http на https. Отсюда и решение через Comобъект делать.
3. Aitbay 06.03.20 11:02 Сейчас в теме
комобъект лучше не использовать
5. Intercititude 06.03.20 11:16 Сейчас в теме
(3) Новый HTTTЗапрос не используется в моей платформе.
ОтправитьДляОбработки(HTTPЗапрос) - этого мало, нужны ещё параметры же.
6. Aitbay 06.03.20 11:16 Сейчас в теме
ЗащищенноеСоединениеOpenSSL(неопределено, неопределено)) не помогает?
8. Intercititude 06.03.20 11:18 Сейчас в теме
(6) Конструктор не найден ругается.
7. Aitbay 06.03.20 11:17 Сейчас в теме
Новый HTTPЗапрос("Сервис с параметрами ")
вот здесь параметры
9. Intercititude 06.03.20 11:19 Сейчас в теме
(7) И какие я параметр по Вашему там должен указать ?
10. Aitbay 06.03.20 11:23 Сейчас в теме
Попытка
ЗащищенноеСоединение = Новый ЗащищенноеСоединение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! " + Символы.ПС + ОписаниеОшибки();
Отказ = Истина;
Возврат Новый ТаблицаЗначений;
КонецПопытки;
13. Intercititude 06.03.20 11:25 Сейчас в теме
(10) Посмотрите в теме платформу. Половины процедур вообще нету.
11. Aitbay 06.03.20 11:23 Сейчас в теме
с ява сервисами иногда приходится вот так извращаться
12. Aitbay 06.03.20 11:25 Сейчас в теме
HTTPЗапрос = Новый HTTPЗапрос("/xmlpserver/services/ExternalReportWSSService");
строка сервиса если к строке get вызова необходимо указать параметры то они дополняются в этой строке
14. Aitbay 06.03.20 11:29 Сейчас в теме
https://sync1c.ru/1c-82-https
вот еще статья здесь предлагают сертификаты сайта добавить в файл cacert и использовать http соединение
16. Intercititude 06.03.20 11:37 Сейчас в теме +0.5 $m
(14) Ну вот это второй вариант. Либо как я делаю через Request. Показалось проще так.
15. Aitbay 06.03.20 11:34 Сейчас в теме
еще как вариант
использовать ПолучениеФайловИзИнтернета.СкачатьФайлИзИнтернета(...)
но не пробовал
модуль есть в типовой бухгалтерии
17. for_sale 981 08.03.20 10:38 Сейчас в теме
Вам нужно посмотреть через браузер, через инструменты разработчика, куда оно вообще скачет. Т.е. там будет что-то вроде 301, 301, 200, т.е. он перенаправляет два раза с хттп на хттпс и потом на домашнюю страницу (как пример, не обязаельно ваш случай). И дальше попробовать повторить весь путь здесь же - т.е. получить ссылку на перенаправление, пройти по ней, получить ответ, обработать ответ, получить ссылку на второе перенаправление и т.п. Либо, если перенаправления всегда одни и те же, то взять последний адрес и уже с ним работать. Проще говоря - вы сейчас получили в 1С первый ответ 301. А вам нужно попасть на первый ответ 200, где страница загрузилась и ждёт уже ответа от пользователя.

Второй вариант - попробовать ОтправитьДляОбработки(Запрос, Файл, Логин, Пароль), кажется так. В документации этого нет, но как-то так, кажется, работало.
Оставьте свое сообщение

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