Создание хранилища конфигурации
This commit is contained in:
172
src/cf/CommonModules/HttpОбщегоНазначения/Ext/Module.bsl
Normal file
172
src/cf/CommonModules/HttpОбщегоНазначения/Ext/Module.bsl
Normal file
@@ -0,0 +1,172 @@
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция ВыполнитьGetЗапрос(АдресРесурса, Параметры = Неопределено, ДвоичныеДанные = Ложь) Экспорт
|
||||
|
||||
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
|
||||
|
||||
Если Параметры <> Неопределено Тогда
|
||||
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
|
||||
КонецЕсли;
|
||||
Запрос = Новый HTTPЗапрос(АдресРесурса);
|
||||
Запрос.Заголовки.Вставить("Content-Type","application/json");
|
||||
|
||||
Ответ = Соединение.Получить(Запрос);
|
||||
|
||||
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
|
||||
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
|
||||
Лог.Дата = ТекущаяДатаСеанса();
|
||||
Лог.HTTPЗапрос = Запрос.АдресРесурса;
|
||||
Лог.HTTPОтвет = ?(ДвоичныеДанные,"Двоичные данные",
|
||||
HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку()));
|
||||
Лог.Записать();
|
||||
КонецЕсли;
|
||||
|
||||
КодСостояния = Ответ.КодСостояния;
|
||||
|
||||
Если КодСостояния = 200 Тогда
|
||||
ТелоОтвета = ?(ДвоичныеДанные, Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ.ПолучитьТелоКакСтроку());
|
||||
Иначе
|
||||
ТелоОтвета = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ.ПолучитьТелоКакСтроку());
|
||||
Описание = ?(ТелоОтвета.Получить("description") <> Неопределено, ТелоОтвета["description"], "");
|
||||
|
||||
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
|
||||
СтрШаблон("Не удалось выполнить запрос. Код состояния = %1. %2", КодСостояния, Описание));
|
||||
ТелоОтвета = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ТелоОтвета;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьPostЗапрос(АдресРесурса, Параметры = Неопределено, Тело = Неопределено) Экспорт
|
||||
|
||||
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
|
||||
|
||||
Если Параметры <> Неопределено Тогда
|
||||
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
|
||||
КонецЕсли;
|
||||
Запрос = Новый HTTPЗапрос(АдресРесурса);
|
||||
Запрос.Заголовки.Вставить("Content-Type","application/json");
|
||||
Если Тело <> Неопределено Тогда
|
||||
Запрос.УстановитьТелоИзСтроки(ОбъектВСтрокуJson(Тело));
|
||||
КонецЕсли;
|
||||
|
||||
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
|
||||
|
||||
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
|
||||
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
|
||||
Лог.Дата = ТекущаяДатаСеанса();
|
||||
Лог.HTTPЗапрос = Запрос.АдресРесурса;
|
||||
Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку());
|
||||
Лог.Записать();
|
||||
КонецЕсли;
|
||||
|
||||
КодСостояния = Ответ.КодСостояния;
|
||||
|
||||
Если КодСостояния = 200 Тогда
|
||||
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
|
||||
Иначе
|
||||
Сообщение = Новый СообщениеПользователю;
|
||||
Сообщение.Текст = "Не удалось выполнить запрос. Код состояния = " + КодСостояния;
|
||||
Сообщение.Сообщить();
|
||||
ТелоОтвета = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ТелоОтвета;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СтрокаJsonВОбъект(СтрокаJson) Экспорт
|
||||
|
||||
ЧтениеJSON = Новый ЧтениеJSON;
|
||||
ЧтениеJSON.УстановитьСтроку(СтрокаJson);
|
||||
Попытка
|
||||
ИтоговоеСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина);
|
||||
ЧтениеJSON.Закрыть();
|
||||
Возврат ИтоговоеСоответствие;
|
||||
Исключение
|
||||
Ошибка = ОписаниеОшибки();
|
||||
ЗаписьЖурналаРегистрации("Ошибка конвертации из JSON в объект", УровеньЖурналаРегистрации.Ошибка,,,Ошибка);
|
||||
КонецПопытки;
|
||||
|
||||
Возврат Неопределено;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОбъектВСтрокуJson(Объект) Экспорт
|
||||
|
||||
ЗаписьJSON = Новый ЗаписьJSON;
|
||||
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб);
|
||||
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
|
||||
Попытка
|
||||
ЗаписатьJSON(ЗаписьJSON, Объект);
|
||||
Возврат ЗаписьJSON.Закрыть();
|
||||
Исключение
|
||||
Ошибка = ОписаниеОшибки();
|
||||
ЗаписьЖурналаРегистрации("Ошибка конвертации объекта в JSON", УровеньЖурналаРегистрации.Ошибка,,,Ошибка);
|
||||
КонецПопытки;
|
||||
|
||||
Возврат "";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ФорматированныйJson(СтрокаJson) Экспорт
|
||||
|
||||
Возврат ОбъектВСтрокуJson(СтрокаJsonВОбъект(СтрокаJson));
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОтветУспех() Экспорт
|
||||
|
||||
СтруктураОтвета = Новый Структура("result", "ok");
|
||||
Возврат ОтветJson(СтруктураОтвета, 200);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОтветОшибка() Экспорт
|
||||
|
||||
ИнформацияОбОшибке = ИнформацияОбОшибке();
|
||||
|
||||
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
|
||||
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
|
||||
|
||||
СтруктураОтвета = Новый Структура("result, description", "error", КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
|
||||
Возврат ОтветJson(СтруктураОтвета, 500);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ОтветJson(Объект, КодСостояния)
|
||||
|
||||
Ответ = Новый HTTPСервисОтвет(КодСостояния);
|
||||
Ответ.Заголовки.Вставить("Content-Type","application/json");
|
||||
Ответ.УстановитьТелоИзСтроки(ОбъектВСтрокуJson(Объект));
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
Функция АдресРесурсаСПараметрами(АдресРесурса, Параметры)
|
||||
|
||||
Если Параметры.Количество() = 0 Тогда
|
||||
Возврат АдресРесурса;
|
||||
КонецЕсли;
|
||||
|
||||
МассивПараметров = Новый Массив;
|
||||
Для каждого Параметр Из Параметры Цикл
|
||||
Если НЕ ЗначениеЗаполнено(Параметр.Значение) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
МассивПараметров.Добавить(СтрШаблон("%1=%2", Параметр.Ключ, Параметр.Значение));
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СтрШаблон("%1?%2", АдресРесурса, СтрСоединить(МассивПараметров, "&"));
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
Reference in New Issue
Block a user