Имя: Пароль:
1C
 
Как засунуть токен в http запрос?
0 Климов Сергей
 
12.02.26
10:28
Имеется сторонний http сервис, в нём простейший запрос - получить новости. https://gigtest.ru/api-documentation/egisz-plus/news/

Сгандобил вот такой код:

    Сервер = "gigtest.ru/api/v2";
    Токен  = "**********************";  
    Логин  = "********";
    Пароль = "********";
    
    ИмяВыходногоФайла = ПолучитьИмяВременногоФайла();
    
    SSL = Новый ЗащищенноеСоединениеOpenSSL();
    HTTPСоединение = Новый HTTPСоединение(Сервер, , Логин, Пароль,,,SSL);

    Запрос = Новый HTTPЗапрос("/news);
    Запрос.Заголовки.Вставить("Accept", "application/json");
    // Пытаемся передать токен
    Запрос.Заголовки.Вставить("access-token", Токен);
    Запрос.Заголовки.Вставить("Authorization", "access-token=" + Токен);
    
    Ответ = HTTPСоединение.Получить(Запрос, ИмяВыходногоФайла);
    
    ОбщегоНазначения.СообщитьПользователю("Код состояния = " + Ответ.КодСостояния);

Пробую по всякому засунуть токен в параметры запроса. Или вовсе его не указываю - всегда получаю 403 - Вам не разрешено производить данное действие. Проверьте подключение к защищенной сети.

Как правильно токен передать?
1 PLUT
 
гуру
12.02.26
10:38
а зачем в заголовки то вставлять?

пример оттудова: обычный get-запрос

curl -X GET "https://gigtest.ru/api/v2/news?access-token={token}

и эта, есть постман программа или расширение для гуглохрома бумеранг

сначала в них получить ответ, затем уже проще и яснопонятнее будет присунуть в 1С

+ есть еще "Универсальные инструменты" [УИ], в них есть консоль HTTP-запросов

https://github.com/cpr1c/tools_ui_1c
2 ТДК
 
12.02.26
10:38
(0) Судя по информации на первой странице сервиса, токен указывается в параметрах curl -X GET "https://gigtest.ru/api/v2/news?access-token={token}
Для отладки, проверки доступа я рекомендую вначале использовать Postman, а после писать вызов на 1с.
Помимо этого, передача СЭМД через провайдеров не всегда, но часто происходит через VPN. Проверь этот момент тоже.
3 Fedor-1971
 
12.02.26
10:38
(0) лучше уточнить у тех, к кому подключаешься, возможно, что токен нужен прямо с троке запроса, например, так:
Запрос = Новый HTTPЗапрос("/" + Токен + "/news");
4 Климов Сергей
 
12.02.26
10:44
(1) Пример оттуда тоже возвращает 403. Подозреваю, потому, что в нём нет логина и пароля. Как в curl присунть логин и пароль тоже непонятно.
5 Климов Сергей
 
12.02.26
10:45
(3) Боюсь, что если я в их поддержку полезу с кодом 1С, меня пошдют )))
Решил сначала спросить совета у социально близких.
6 Garykom
 
гуру
12.02.26
10:45
(0) 1. В параметры не в заголовки и не в тело а в сам URL судя по описанию АПИ
2. Учти что в URL надо параметры отдельно кодировать, если внутри не чистая латиница
7 PLUT
 
гуру
12.02.26
10:46
(4) для новостей только токен доступа к апи нужен и три кода ашипки этот метод возвращает

у вас с токеном какую ашипку возвращает?

может у вас токен несвежий?
8 Garykom
 
гуру
12.02.26
10:46
(4) Про логин и пароль в описании апи не вижу
9 ТДК
 
12.02.26
10:46
(4) прислушайся к совету насчёт Postman и проверки доступа к API через него. После уже делай в 1С.
10 maxar
 
12.02.26
10:47
(4) возможно в заголовки нужно добавить  -H "Content-Type: application/json" \
11 Garykom
 
гуру
12.02.26
10:47
(5) А ты с curl ползи в техподдержку, пусть рабочий пример покажут с логином и паролем
12 Garykom
 
гуру
12.02.26
10:47
(9) В жопу постман
curl намного лучше и встроен в винду давно
13 PLUT
 
гуру
12.02.26
10:48
(5)  При возникновении вопросов или проблем с API обращайтесь в техническую поддержку

это из (0)
14 Garykom
 
гуру
12.02.26
10:49
Общие требования к использованию API
Передача сведений осуществляется в рамках защищённого соединения с помощью OpenVPN-ГОСТ;
Аутентификация: в каждом запросе необходимо передавать параметр access-token;
Для получения ответа в формате JSON необходимо передавать заголовок запроса Accept:application/json;
Кодировка ответа UTF-8;
СЭМД и подпись врача передаются в Base64.
15 Климов Сергей
 
12.02.26
10:52
(10) Есть такое:
    Запрос.Заголовки.Вставить("Accept", "application/json");
Но до возврата джейсона дело то не доходит, отлуп получаю.
16 Климов Сергей
 
12.02.26
10:53
(12) Я не очень понимаю, как строку curl разложить в код 1С. Собственно, я вижу как в curl указывается токен. Но как мне сделать тоже самое в 1С - не пойму. Туп в колене.
17 ТДК
 
12.02.26
10:55
(16) в 1с это будет в параметрах запроса
18 PLUT
 
гуру
12.02.26
10:55
(16) для начала у техподдержки узнай про свой токен. может он протух или техподдержка у себя там галочку какую должны поставить

затем в curl или в постмане или УИ (универсальные интсрументы) добейся с помощью техподдержки и такой-то матери ответа в Джысон

а уже потом мучай 1С
19 PLUT
 
гуру
12.02.26
11:02
(16) типа такого (используется коннектор http)
https://github.com/vbondarevsky/Connector

только у тебя вместо apikey будет свежий токен

пример получения джысона
//Запрос к АПИ ФНС
    МетодAPI         = "egr";
    ПутьНаСервере     = МетодAPI + "?req=" + Источник["ИНН"] + "&key=" + apikey;

Результат         = ВыполнитьGET_API_ФНС(ПутьНаСервере);

&НаСервере
Функция ВыполнитьGET_API_ФНС(ПутьНаСервере)
    
    Таймаут = 120;
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    
    Результат = КоннекторHTTP.GetJson("https://api-fns.ru/api/ + ПутьНаСервере,
                                        Неопределено,
                                        Новый Структура("Заголовки,
                                                        |Таймаут",
                                                        Заголовки,
                                                        Таймаут
                                                        )
                                        );
    
    Возврат Результат;

КонецФункции
20 ДенисСмирнов
 
12.02.26
11:08
(16) так с curl обращение работает? Да или нет?
21 Климов Сергей
 
12.02.26
11:29
(20) Нет
{
  "name": "Forbidden",
  "message": "Вам не разрешено производить данное действие. Проверьте подключение к защищенной сети",
  "code": 0,
  "status": 403
}
22 Джордж1
 
12.02.26
11:35
(21)вы запрос выложите полностью свой - что уходит на сервер. Только токен удалите
23 ТДК
 
12.02.26
11:32
(21) подключение к защищенной сети работает?
24 Климов Сергей
 
12.02.26
11:35
25 Джордж1
 
12.02.26
11:36
(24)токен не протух?
26 Климов Сергей
 
12.02.26
11:44
(25) Прислали пару дней назад, на официальной бумаге с подписью и печатью.
27 ДенисСмирнов
 
12.02.26
11:45
(21) пишите в поддержку. должно работать. все как в (18) короче
28 Джордж1
 
12.02.26
11:45
(26)ну тогда в техподдержку
29 Климов Сергей
 
12.02.26
11:54
(1) Спасибо, товарищ!👍 С помощью консоли запросов УИ со второго тыка получилось!
30 Климов Сергей
 
12.02.26
12:16
Принципиальное отличие в следующем:
1.
    //Сервер = "gigtest.ru/api/v2"; // Неправильно!
    Сервер = "gigtest.ru";

    //Запрос = Новый HTTPЗапрос("/news); //Неправильно!
    Запрос = Новый HTTPЗапрос("/api/v2/news);

2. И токен вот так:
Токен = "***************************";
ПрефиксТокена = "access-token=";
НовыйЗапрос.Заголовки.Вставить("Authorization", ПрефиксТокена +" "+Токен);
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн