1
MWWRuza
27.01.25
✎
23:25
|
Целиком функция из моей рабочей конфы, там много лишнего, просто ей много лет, и она "обросла" всякой обвязкой...
Но, в принципе, как пример - можно использовать:
//******************************************************************************
// глHTPP_ВыполнитьЗапрос()
//
// Параметры:
// ТипЗапроса="POST",Url,сзJSONЗапрос,КлючСессии="",сзЗаголовки="",СтрОшибка=""
//
// Возвращаемое значение:
// Ответ
//
// Описание:
//
Функция глHTPP_ВыполнитьЗапрос(ТипЗапроса="POST",Url,сзJSONЗапрос,КлючСессии="",сзЗаголовки="",СтрОшибка="", НеОбр429 = 0, ПрикинутьсяБраузером = 0) Экспорт
Попытка
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
Исключение
Предупреждение("Не удалось создать объект WinHttp!");
Возврат 0;
КонецПопытки;
WinHttp.Option(2,"utf-8");
WinHttp.SetTimeouts(0, 0, 0, 0);
Если ТипЗначенияСтр(сзJSONЗапрос) = "СписокЗначений" Тогда
ЗапросJSON = ЗначениеВJSON(сзJSONЗапрос);
Иначе
ЗапросJSON = "";
КонецЕсли;
//Тхт = СоздатьОбъект("Текст");
//Тхт.ДобавитьСтроку(ЗапросJSON);
//Тхт.Записать("C:\Temp\ЗапросМсХТТП.txt");
WinHttp.Open(ТипЗапроса,Url,1);
WinHttp.SetRequestHeader("Content-Type", "application/json");
Если (ПрикинутьсяБраузером = 1) И (Константа.ПрикБраузЧерезAPI = 1) Тогда
WinHttp.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.59");
КонецЕсли;
WinHttp.SetRequestHeader("Accept-Charset", "utf-8");
Если ПустоеЗначение(КлючСессии) = 0 Тогда
WinHttp.SetRequestHeader ("Authorization", "Bearer " + КлючСессии);
КонецЕсли;
Если ПустоеЗначение(сзЗаголовки) = 0 Тогда
СчЦикла = 0;
Для СчЦикла = 1 По сзЗаголовки.РазмерСписка() Цикл
ИмяЗаголовка = "";
ЗначениеЗаголовка = сзЗаголовки.ПолучитьЗначение(СчЦикла,ИмяЗаголовка);
Если (ПустоеЗначение(ИмяЗаголовка) = 0) И (ПустоеЗначение(ЗначениеЗаголовка) = 0) Тогда
WinHttp.SetRequestHeader (ИмяЗаголовка, ЗначениеЗаголовка);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Рез = WinHttp.Send(ЗапросJSON);
RequestTimeout = 40;
Попытка
Рез = WinHttp.WaitForResponse(RequestTimeout);
Исключение
Рез = 0;
Ответ = ОписаниеОшибки();
WinHttp = 0;
Возврат Ответ;
КонецПопытки;
Если Рез = -1 Тогда
Статус = WinHttp.status();
СтатусТекст = WinHttp.statusText();
Ответ = СокрЛП(WinHttp.ResponseText());
Если (Статус <> 200) Или (Статус <> 201) Тогда
Если Статус = 307 Тогда//перенаправление
Url = WinHttp.GetResponseHeader("Location");
Если ПустоеЗначение(Url) = 0 Тогда
Возврат глHTPP_ВыполнитьЗапрос(ТипЗапроса,Url,сзJSONЗапрос,КлючСессии,сзЗаголовки,СтрОшибка);
КонецЕсли;
КонецЕсли;
Если (Статус = 429) И (НеОбр429 = 0) Тогда//слишком много запросов
глЗадержка(5);
WinHttp = 0;
Возврат глHTPP_ВыполнитьЗапрос(ТипЗапроса,Url,сзJSONЗапрос,КлючСессии,сзЗаголовки,СтрОшибка);
КонецЕсли;
Если ПустоеЗначение(Ответ) = 0 Тогда
Если Лев(Ответ,1) = "{" Тогда
сзОтвет = глРазборJSON(Ответ);
СтрОшибка = сзОтвет.Получить("error_description");
WinHttp = 0;
Возврат Ответ;
КонецЕсли;
Иначе
WinHttp = 0;
Возврат "";
КонецЕсли;
КонецЕсли;
КонецЕсли;
WinHttp = 0;
Возврат Ответ;
КонецФункции // ВыполнитьЗапрос()
|
|
2
MWWRuza
27.01.25
✎
23:46
|
А так, сама суть, что-то типа этого:
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");
WinHttp.SetTimeouts(0, 0, 0, 0);
WinHttp.Open("GET"," https://api.qvalon.com/v1/orgstruct/divisions ,1);
WinHttp.SetRequestHeader ("Authorization", "Bearer " + your_token);
Рез = WinHttp.Send(<здесь тело запроса если есть, или "">);
|
|