Имя: Пароль:
1C
 
1c 7.7 и простой post/get запрос.
↓ (Волшебник 28.01.2025 15:33)
0 vplotnikov
 
27.01.25
23:08
Не приходилось пользоваться WinHttp.WinHttpRequest.5.1
Есть такой запрос, который должен бы отрабатываться.

curl https://api.qvalon.com/v1/orgstruct/divisions \
--header 'Authorization: Bearer <your_token>'

Подскажите, пожалуйста, синтаксис. Как это должно быть оформлено.
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(<здесь тело запроса если есть, или "">);
3 MWWRuza
 
27.01.25
23:41
Но, вообще, я последнее время постепенно ухожу от использования WinHttp в пользу ВК curl1c.dll (карлик :-))... Как-то меньше с ней проблем.
4 Dzenn
 
28.01.25
11:12
Семёрка, когда проектировалась, и подумать не могла, что её будут так насиловать в старческом возрасте ))
5 ChMikle
 
28.01.25
14:52
(4) а почему сразу "насиловать", может быть реализовывать потаенные творческие фантазии :))
6 Злопчинский
 
28.01.25
15:19
(5) ;-) Потенция у семерки еще огого!
7 Волшебник
 
28.01.25
15:33
(6) хуй вам
8 Pit0n_08
 
28.01.25
16:40
(7) Ну пока ещё не 01.01.2037)))
9 uno-group
 
28.01.25
17:04
(8) да ладно до 31.12.9999 как-то продержимся, а там уже на новый софт перейдем.
10 MWWRuza
 
28.01.25
17:10
(8) ну, до этого еще дожить надо... Мне, если доживу, будет 71 год... Думаю, вряд-ли меня этот вопрос тогда интересовать будет :-(