- Рефакторинг процедур http запросов
- Изменил структуру логирования - Добавил метод sendDocument() - Структурировал код для большей читабельности
This commit is contained in:
@@ -2,82 +2,115 @@
|
||||
|
||||
Функция ВыполнитьGetЗапрос(АдресРесурса, Параметры = Неопределено, ДвоичныеДанные = Ложь) Экспорт
|
||||
|
||||
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
|
||||
РезультатЗапроса = Новый Структура();
|
||||
РезультатЗапроса.Вставить("Успех", Ложь);
|
||||
РезультатЗапроса.Вставить("Тело", Неопределено);
|
||||
РезультатЗапроса.Вставить("Описание", "");
|
||||
РезультатЗапроса.Вставить("ДвоичныеДанные", ДвоичныеДанные);
|
||||
|
||||
Если Параметры <> Неопределено Тогда
|
||||
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
|
||||
КонецЕсли;
|
||||
Запрос = Новый HTTPЗапрос(АдресРесурса);
|
||||
Запрос.Заголовки.Вставить("Content-Type","application/json");
|
||||
|
||||
Ответ = Соединение.Получить(Запрос);
|
||||
|
||||
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
|
||||
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
|
||||
Лог.Дата = ТекущаяДатаСеанса();
|
||||
Лог.HTTPЗапрос = Запрос.АдресРесурса;
|
||||
Лог.HTTPОтвет = ?(ДвоичныеДанные,"Двоичные данные",
|
||||
HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку()));
|
||||
Лог.Записать();
|
||||
КонецЕсли;
|
||||
|
||||
КодСостояния = Ответ.КодСостояния;
|
||||
|
||||
Если КодСостояния = 200 Тогда
|
||||
ТелоОтвета = ?(ДвоичныеДанные, Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ.ПолучитьТелоКакСтроку());
|
||||
Иначе
|
||||
ТелоОтвета = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ.ПолучитьТелоКакСтроку());
|
||||
Описание = ?(ТелоОтвета.Получить("description") <> Неопределено, ТелоОтвета["description"], "");
|
||||
Попытка
|
||||
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
|
||||
|
||||
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
|
||||
СтрШаблон("Не удалось выполнить запрос. Код состояния = %1. %2", КодСостояния, Описание));
|
||||
ТелоОтвета = Неопределено;
|
||||
КонецЕсли;
|
||||
Если Параметры <> Неопределено Тогда
|
||||
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
|
||||
КонецЕсли;
|
||||
|
||||
Запрос = Новый HTTPЗапрос(АдресРесурса);
|
||||
Запрос.Заголовки.Вставить("Content-Type","application/json");
|
||||
Ответ = Соединение.Получить(Запрос);
|
||||
ТелоОтветаКакСтрока = Ответ.ПолучитьТелоКакСтроку();
|
||||
|
||||
РезультатЗапроса.Тело = ?(ДвоичныеДанные, Ответ.ПолучитьТелоКакДвоичныеДанные(),
|
||||
HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоОтветаКакСтрока));
|
||||
|
||||
Если НЕ ДвоичныеДанные И РезультатЗапроса.Тело.Получить("description") <> Неопределено Тогда
|
||||
РезультатЗапроса.Описание = РезультатЗапроса.Тело["description"];
|
||||
КонецЕсли;
|
||||
|
||||
КодСостояния = Ответ.КодСостояния;
|
||||
Если КодСостояния = 200 Тогда
|
||||
РезультатЗапроса.Успех = Истина;
|
||||
Иначе
|
||||
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
|
||||
СтрШаблон("Ошибка выполнения HTTP-запроса. Код состояния = %1. Описание:%2", КодСостояния,
|
||||
РезультатЗапроса.Описание));
|
||||
КонецЕсли;
|
||||
|
||||
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
|
||||
ЗалогироватьЗапрос(АдресРесурса, Перечисления.МетодHTTPЗапроса.GET, ТелоОтветаКакСтрока, КодСостояния);
|
||||
КонецЕсли;
|
||||
Исключение
|
||||
РезультатЗапроса.Успех = Ложь;
|
||||
РезультатЗапроса.Описание = "Исключение при выполнении HTTP-запроса: " + ОписаниеОшибки();
|
||||
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, РезультатЗапроса.Описание);
|
||||
КонецПопытки;
|
||||
|
||||
Возврат ТелоОтвета;
|
||||
Возврат РезультатЗапроса;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьPostЗапрос(АдресРесурса, Параметры = Неопределено, Тело = Неопределено) Экспорт
|
||||
Функция ВыполнитьPostЗапрос(АдресРесурса, Параметры = Неопределено, Данные = Неопределено) Экспорт
|
||||
|
||||
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
|
||||
РезультатЗапроса = Новый Структура();
|
||||
РезультатЗапроса.Вставить("Успех", Ложь);
|
||||
РезультатЗапроса.Вставить("Тело", Неопределено);
|
||||
РезультатЗапроса.Вставить("Описание", "");
|
||||
|
||||
Если Параметры <> Неопределено Тогда
|
||||
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
|
||||
КонецЕсли;
|
||||
Запрос = Новый HTTPЗапрос(АдресРесурса);
|
||||
Запрос.Заголовки.Вставить("Content-Type","application/json");
|
||||
Если Тело <> Неопределено Тогда
|
||||
Запрос.УстановитьТелоИзСтроки(ОбъектВСтрокуJson(Тело));
|
||||
КонецЕсли;
|
||||
Попытка
|
||||
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
|
||||
|
||||
Если Параметры <> Неопределено Тогда
|
||||
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
|
||||
КонецЕсли;
|
||||
Запрос = Новый HTTPЗапрос(АдресРесурса);
|
||||
|
||||
Если Данные <> Неопределено Тогда
|
||||
Если Данные.Свойство("Разделитель") Тогда
|
||||
Запрос.УстановитьТелоИзДвоичныхДанных(Данные.ДвоичныеДанные);
|
||||
Запрос.Заголовки.Вставить("Content-Length", Формат(Данные.ДвоичныеДанные.Размер(), "ЧН=0; ЧГ="));
|
||||
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Данные.Разделитель);
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Запрос.Заголовки.Вставить("Content-Type","application/json");
|
||||
КонецЕсли;
|
||||
|
||||
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
|
||||
ТелоОтветаКакСтрока = Ответ.ПолучитьТелоКакСтроку();
|
||||
|
||||
ТелоДляОтвета = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоОтветаКакСтрока);
|
||||
Если ТелоДляОтвета <> Неопределено Тогда
|
||||
РезультатЗапроса.Тело = ТелоДляОтвета;
|
||||
РезультатЗапроса.Описание = ?(ТелоДляОтвета.Получить("description") <> Неопределено, ТелоДляОтвета["description"], "");
|
||||
КонецЕсли;
|
||||
|
||||
КодСостояния = Ответ.КодСостояния;
|
||||
Если КодСостояния = 200 Тогда
|
||||
РезультатЗапроса.Успех = Истина;
|
||||
Иначе
|
||||
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
|
||||
СтрШаблон("Ошибка выполнения HTTP-запроса. Код состояния = %1. Описание:%2", КодСостояния,
|
||||
РезультатЗапроса.Описание));
|
||||
КонецЕсли;
|
||||
|
||||
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
|
||||
ЗалогироватьЗапрос(АдресРесурса, Перечисления.МетодHTTPЗапроса.POST, ТелоОтветаКакСтрока, КодСостояния);
|
||||
КонецЕсли;
|
||||
Исключение
|
||||
РезультатЗапроса.Успех = Ложь;
|
||||
РезультатЗапроса.Описание = "Исключение при выполнении HTTP-запроса: " + ОписаниеОшибки();
|
||||
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, РезультатЗапроса.Описание);
|
||||
КонецПопытки;
|
||||
|
||||
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
|
||||
|
||||
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
|
||||
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
|
||||
Лог.Дата = ТекущаяДатаСеанса();
|
||||
Лог.HTTPЗапрос = Запрос.АдресРесурса;
|
||||
Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку());
|
||||
Лог.Записать();
|
||||
КонецЕсли;
|
||||
|
||||
КодСостояния = Ответ.КодСостояния;
|
||||
|
||||
Если КодСостояния = 200 Тогда
|
||||
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
|
||||
Иначе
|
||||
Сообщение = Новый СообщениеПользователю;
|
||||
Сообщение.Текст = "Не удалось выполнить запрос. Код состояния = " + КодСостояния;
|
||||
Сообщение.Сообщить();
|
||||
ТелоОтвета = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ТелоОтвета;
|
||||
Возврат РезультатЗапроса;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СтрокаJsonВОбъект(СтрокаJson) Экспорт
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(СтрокаJson) Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
ЧтениеJSON = Новый ЧтениеJSON;
|
||||
ЧтениеJSON.УстановитьСтроку(СтрокаJson);
|
||||
Попытка
|
||||
@@ -95,6 +128,11 @@
|
||||
|
||||
Функция ОбъектВСтрокуJson(Объект) Экспорт
|
||||
|
||||
Если Объект = Неопределено Тогда
|
||||
Возврат "";
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ЗаписьJSON = Новый ЗаписьJSON;
|
||||
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб);
|
||||
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
|
||||
@@ -150,7 +188,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
Функция АдресРесурсаСПараметрами(АдресРесурса, Параметры)
|
||||
|
||||
Если Параметры.Количество() = 0 Тогда
|
||||
@@ -169,4 +206,18 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗалогироватьЗапрос(АдресРесурса, Метод, ТелоОтветаКакСтрока, КодСостояния)
|
||||
|
||||
АдресРесурса = СтрЗаменить(АдресРесурса, Константы.ТелеграмТокен.Получить(), "#token#");
|
||||
|
||||
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
|
||||
Лог.Дата = ТекущаяДатаСеанса();
|
||||
Лог.HTTPЗапрос = АдресРесурса;
|
||||
Лог.Метод = Метод;
|
||||
Лог.КодСостояния = КодСостояния;
|
||||
Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(ТелоОтветаКакСтрока);
|
||||
Лог.Записать();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
Reference in New Issue
Block a user