Коннектор: удобный HTTP-клиент для 1С:Предприятие 8

27.12.21

Разработка - Инструментарий разработчика

Коннектор - библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8

В мире python очень популярна библиотека для работы с HTTP запросами - Requests (автор: Kenneth Reitz). Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п. В общем библиотека очень мощная и проста в использовании.

Коннектор - это "Requests" для мира 1С.

Возможности

Основные возможности библиотеки:

  • Передача параметров в строку запроса (в URL)
  • Удобная работа с запросами и ответами в формате JSON
  • Отправка данных формы (полей формы), application/x-www-form-urlencoded
  • Отправка данных формы (полей формы и файлов), multipart/form-data
  • Прозрачная поддержка ответов, закодированных GZip
  • Сжатие тела запроса GZip
  • Basic, Digest и AWS4-HMAC-SHA256 аутентификация
  • Автоматическое разрешение редиректов
  • Установка и чтение Cookies
  • Работа в рамках сессии с сохранением состояния (cookies, аутентификация и пр.)
  • Переиспользование HTTPСоединение в рамках сессии
  • Настраиваемые повторные попытки соединения/отправки запроса с экспоненциальной задержкой
  • Работает в т.ч. и на мобильной платформе
  • Доступна версия для 1Script
  • И многое другое

Требования

Платформа 8.3.10 и выше.

Мобильная платформа (проверено только на 8.3.15)

1Script >=1.1.1

Где взять

1С:Предприятие 8

https://github.com/vbondarevsky/Connector

1Script

https://github.com/vbondarevsky/1connector

Использование

1С:Предприятие 8

Скопируйте общий модуль КоннекторHTTP к себе в конфигурацию.

1Script

opm install 1connector

Пример мощи библиотеки

Чем же хороша библиотека? Давай уже покажи пример.

Получим данные JSON с помощью GET-запроса:

Вот так это делается стандартными средствами 1С

ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Новый СертификатыУдостоверяющихЦентровОС);
Соединение = Новый HTTPСоединение("api.github.com", 443,,,, 30, ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("/events");
Ответ = Соединение.Получить(Запрос);
Поток = Ответ.ПолучитьТелоКакПоток();
Кодировка = "utf-8"; // ну допустим мы знаем что там такая кодировка

Ридер = Новый ЧтениеJSON;
Ридер.ОткрытьПоток(Поток, Кодировка); // Кодировка в заголовке ответа
Результат = ПрочитатьJSON(Ридер);
Ридер.Закрыть();

А вот так с помощью Коннектора

Результат = КоннекторHTTP.GetJson("https://api.github.com/events");

Все! В Результат будет десериализованный из JSON ответ сервера. При этом:

  • Библиотека сама разбила URL на составляющие
  • Установила защищенное соединение
  • Определила кодировку ответа из заголовков
  • Десериализовала JSON

И это достаточно простой пример. Всю мощь библиотеки рассмотрим далее.

 
Передача параметров в строку запроса (в URL)
 
Произвольные HTTP заголовки
 
Работа с JSON
 
Отправка данных формы
 
Отправка файла
 
Отправка файлов и данных формы
 
Отправка произвольных данных
 
Содержимое ответа
 
GZip-кодирование тела запроса
 
GZip-декодирование
 
Таймаут
 
Basic-аутентификация
 
Digest-аутентификация
 
AWS4-HMAC-SHA256-аутентификация
 
Доступ через прокси-сервер
 
Поддерживаемые HTTP методы
 
Редиректы (Перенаправления)
 
Проверка серверного сертификата SSL
 
Клиентские сертификаты
 
Работа с Cookies
 
Работа в рамках сессии
 
Повторные попытки соединения/отправки запроса

http post get cookie ssl url multipart/form-data x-www-form-urlencoded gzip редирект digest дайджест аутентификация https hmac aws aws-hmac-sha256 amazon basic

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121550    670    389    

709

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7255    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    3491    11    1    

33

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177717    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99332    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18095    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28081    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23591    15    15    

32
Вознаграждение за ответ
Показать полностью
Отзывы
46. bonv 1510 18.02.19 19:56 Сейчас в теме
UPDATE: Доступна версия для 1Script
opm install 1connector
_Farsh_; dejurik; sstas007; Созинов; antonio_i; Arsvacare; BoryaMbi; lopatrik; SIrina9; blindcat2006; raevsky@e1.ru; simvol@s; iulyus; maksa2005; user859339; abasovit; untru; Krio2; mickey.1cx; Perfolenta; karachev_og; kote; mvxyz; Evg-Lylyk; nixel; Danil.Potapov; ardarik; ardn; Aleskey_K; ktb; EGOLEGE; Merc; GreenDragon; +33 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
96. bonv 1510 30.08.19 16:39 Сейчас в теме
(95)

1) Собираешься ли ты реализовать поддержку параметровURL ? пример "/storage/{Storage}/{ID}"

Это зачем? Можно пример


2) Поддержку соединения, не каждый раз его инициализировать а что-то подобное .СоздатьСессию().

Да, в рамках сессии соединение будет сохраняться, но пока еще не сделал
103. bonv 1510 14.10.19 09:26 Сейчас в теме
(95)
2) Поддержку соединения, не каждый раз его инициализировать а что-то подобное .СоздатьСессию().


Теперь в рамках сессии HTTPСоединение переиспользуется
JohnyDeath; +1 Ответить
87. пользователь 23.07.19 12:29
Сообщение было скрыто модератором.
...
97. chipazawra 30.08.19 17:36 Сейчас в теме
Есть URL такого вида https://.....//storage/{Storage}/{ID}
Storage и ID это параметры.
Если брать HTTP сервис 1С то в шаблоне они указываются в фигурных скобках.
И тогда когда мы получаем запрос на наш HTTP-сервис:

HTTPСервисЗапрос (HTTPServiceRequest)
Свойства:
HTTPМетод (HTTPMethod)
БазовыйURL (BaseURL)
Заголовки (Headers)
ОтносительныйURL (RelativeURL)
ПараметрыURL (URLParameters)
ПараметрыЗапроса (QueryOptions)
Методы:
ПолучитьТелоКакДвоичныеДанные (GetBodyAsBinaryData)
ПолучитьТелоКакПоток (GetBodyAsStream)
ПолучитьТелоКакСтроку (GetBodyAsString)
Описание:
Описывает запрос к HTTP-сервису.
Доступность:
Сервер, толстый клиент.

{Storage} и {ID} уже будут в структуре ПараметрыURL в удобном виде.

Когда мы обращаемся из 1С на HTTP-Сервисы такого рода с помощью твоего коннектора то приходится делать так:

ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Аутентификация", Аутентификация);
НТТPОтвет = КоннекторHTTP.Get(СтрШаблон("%1/%2%3", URL, Storage, ID),, ДополнительныеПараметры);

Что ИМХО показалось костылём.

Сначала я надеялся на такую реализацию.

ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Аутентификация", Аутентификация);

ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("Storage", "main");
ПараметрыURL.Вставить("ID", "1488");

НТТPОтвет = КоннекторHTTP.Get(URL,, ПараметрыURL, ДополнительныеПараметры);

А так коннектор очень удобный. Пользуюсь, жду соединение в сессии.
125. leemuar 24.01.20 17:55 Сейчас в теме
(97) добавьте функцию-обертку, принимающую параметры структурой, формирующую итоговую строку и вызывающую оригинальную функцию библиотеки. Присылайте пулреквест на гитхабе
98. vlad1976 03.09.19 23:55 Сейчас в теме
как тут
данные в КоннекторHTTP.ВызватьМетодВСеансе Json передать?


Ответ = КоннекторHTTP.ВызватьМетодВСеансе(Сессия, "POST", Ответ.URL, Json);
99. bonv 1510 04.09.19 00:18 Сейчас в теме
(98)
ДополнительныеПараметры = Новый Структура("Json", Json);
Ответ = КоннекторHTTP.ВызватьМетодВСеансе(Сессия, "POST", Ответ.URL, ДополнительныеПараметры);

Вообще, у этого метода достаточно подробная документация
117. пользователь 02.12.19 14:20
Сообщение было скрыто модератором.
...
100. kote 536 30.09.19 00:48 Сейчас в теме
Подскажите, библиотека будет работать в мобильном приложении?
101. bonv 1510 30.09.19 11:53 Сейчас в теме
(100) Без изменений не заработает. Точно нужно убрать GZip/Zip, т.к. объект ЧтениеZipФайла не доступен в приложении. Записал себе сделать совместимость
102. bonv 1510 14.10.19 09:24 Сейчас в теме
(100) Теперь работает и в мобильном приложении
104. KUAvanesov 17.10.19 14:52 Сейчас в теме
Друзья, подскажите:
Нужно отправить пост запрос с параметром и телом запроса.
какая конструкция должна быть с использованием этого коннектора?

ответ = post(Запрос,Параемтры,ДополнительныеПараметры);


Куда ложить тело а куда параметры?
105. bonv 1510 17.10.19 14:56 Сейчас в теме
(104) Речь про multipart/form-data ?
Что в теле?
106. KUAvanesov 17.10.19 15:00 Сейчас в теме
(105)
нет.
Мой запрос:
http://suz2.crpt.ru/api/v2/light/orders?omsId=531af4d8-409c-49cb

где omsId=531af4d8-409c-49cb - это параметр запроса.

В запросе я передаю json строку.

Как мне используя ваш коннектор выполнить этот запрос?
107. bonv 1510 17.10.19 17:38 Сейчас в теме
(106)
Json = Новый Структура("key", "value");
	
Параметры = Новый Соответствие;
Параметры.Вставить("omsId", "531af4d8-409c-49cb");
ДополнительныеПараметры = Новый Структура("ПараметрыЗапроса", Параметры);
Ответ = КоннекторHTTP.PostJson(
	"https://suz2.crpt.ru/api/v2/light/orders", Json, ДополнительныеПараметры);
	
ДополнительныеПараметры = Новый Структура("ПараметрыЗапроса, Json", Параметры, Json);
Ответ = КоннекторHTTP.Post(
	"https://suz2.crpt.ru/api/v2/light/orders", Неопределено, ДополнительныеПараметры);
Показать
mc2; KUAvanesov; +2 Ответить
108. KUAvanesov 18.10.19 11:00 Сейчас в теме
(107)
Параметры


ок. А куда вставлять заголовки?
Пример тот же, но нужно вставить заголовок:

clientToken: "token"

Куда его поместить?
109. bonv 1510 18.10.19 11:47 Сейчас в теме
(108)
Заголовки = Новый Соответствие;
Заголовки.Вставить("key", "value");
ДополнительныеПараметры.Вставить("Заголовки", Заголовки);


Все же есть в описание. См. Произвольные HTTP заголовки
110. aicom 16 10.11.19 14:58 Сейчас в теме
В процедуре ПодготовитьТелоЗапроса стоит заменить конструкцию
ИначеЕсли НЕ ЗначениеЗаполнено(Json) Тогда
на
ИначеЕсли Json <> Неопределено Тогда.
Это позволит отправлять запросы с пустым содержимым Json, по типу этого:
POST /v2/posting/fbs/act/create HTTP/1.1
Host: api-seller.ozon.ru/apiref/ru/
Content-Type: application/json

{}
JohnyDeath; +1 Ответить
111. bonv 1510 18.11.19 01:23 Сейчас в теме
118. пользователь 02.12.19 14:25
Сообщение было скрыто модератором.
...
112. Darklight 32 22.11.19 16:12 Сейчас в теме
Отличная библиотека! Но...

Файлы = Новый Массив;
Файлы.Добавить(Новый Структура("Имя,Данные,ИмяФайла", "f1", Base64Значение("ZmlsZTE="), "file1.txt"));
Файлы.Добавить(Новый Структура("Имя,Данные,ИмяФайла", "f2", Base64Значение("ZmlsZTI="), "file2.txt"));

Данные = Новый Структура("field1,field2", "value1", "Значение2");

Результат = КоннекторHTTP.PostJson("https://httpbin.org/post", Неопределено, Новый Структура("Файлы,Данные", Файлы, Данные));
Показать


Зачем так всё "усложнять" с передачей данных формы - сразу двумя путями:

- через 2-ой параметр
Результат = КоннекторHTTP.PostJson("https://httpbin.org/post", Данные, Новый Структура("Файлы", Файлы));


- через 3-тий параметр "ДополнительныеПараметры" (как в примере выше).

Так реализовано было в оригинальном Python.Requests (простите не знаком с этой библиотекой)?

На мой взгялд, этот второй параметр ("Данные") тут лишний - в большинстве случаев (кроме тривиальных) всегда,так-или, иначе будет потребность задействовать 3-тий параметр "ДополнительныеПараметры" - а значит 2-той почти всегда будет пропущзен = неопределено - даже если надо передать данные формы - их удобнее передать через "ДополнительныеПараметры".

Я понимаю, что в Python.Requests наверняка для этих целей используют именованные реквизиты, а не структуру "ДополнительныеПараметры", но считаю зря - параметр данных формы Вы оставили отдельным аргументом.


И ещё о сессиях (наверное тоже взято из Python.Requests?)

Сессия = КоннекторHTTP.СоздатьСессию();
Ответ = КоннекторHTTP.ВызватьМетодВСеансе(Сессия, "GET", "https://releases.1c.ru/total");


На мой взгляд, сессии нужно было унифицировать с обычными методами http-команд, передавая сессию либо отдельным аргментом (влед за "ДополнительнымиПараметрами", либо, что, наверное, лучше - передавать в самом аргументе "ДополнительнымиПараметрами".
Сессия = КоннекторHTTP.СоздатьСессию();
Ответ = КоннекторHTTP.Get("https://releases.1c.ru/total",,Новый Структура("Сессия", Сессия));


И не плодить отдельные и более общие методы для работы в сессиях
Ответ = КоннекторHTTP.ВызватьМетодВСеансе(Сессия, "POST", Ответ.URL, Новый Структура("Данные", Данные));


А и ещё, в одно случае у вас это "Сессия": "КоннекторHTTP.СоздатьСессию()"
А в другом - "Сеанс": "КоннекторHTTP.ВызватьМетодВСеансе"
Диссонанс именования одной и той же сущности

P.S.
Ну и хотелось бы иметь примеры работы с OData - и, в частности, расширение библиотеки для работы с REST-API 1С Предприятие 8 (как с ИБ, так и для администрирования сервера приложений - хотя последнее уже не так актуально, появлением в 1С объекта "АдминистрированиеСервера"; но REST-API очень даже актуален). да и вообще - хорошо было бы показать "низкоуровневые" примеры работы в WEB-сервисами

Но это уже хателки
JohnyDeath; +1 Ответить
113. SlaSla 29 23.11.19 08:01 Сейчас в теме
Спасибо огромное за библиотеку!
Вот бы еще найти аналогичное для 7.7 :)
114. ruslandia1998 24.11.19 17:28 Сейчас в теме
Результат = КоннекторHTTP.GetJson("https://api.github.com/events");
Крашит Предприятие, версия 8.3.10.2252
142. bonv 1510 03.05.20 16:41 Сейчас в теме
(114) Эта версия платформы очень не стабильно работает с двоичными данными
115. starovton 11 29.11.19 13:21 Сейчас в теме
как с помощью библы получать данные в "бесконечном" потоке?
116. bonv 1510 29.11.19 17:18 Сейчас в теме
(115) в библиотеки используются средства платформы, а платформа умеет возвращать ответ только целиком. Ну т.е. сейчас никак
119. dimauspeh 02.12.19 14:33 Сейчас в теме
Помогите пожалуйста! Не проходт авторизацию!

Процедура Кнопка6Нажатие(Элемент)
	Заголовки = Новый Соответствие;
Заголовки = Новый Соответствие();
	Заголовки.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
   Заголовки.Вставить("Referer", "https://b2b.tui.ua/default.php?page=cl_refer&CLAIM=4203868");
   Заголовки.Вставить("Connection", "keep-alive");
	Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
	Заголовки.Вставить("Upgrade-Insecure-Requests", "1");
	Заголовки.Вставить("Content-Charset", "utf-8");
	Заголовки.Вставить("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
Заголовки.Вставить("Accept-Encoding", "gzip, deflate, br");
Заголовки.Вставить("Accept-Charset", "utf-8");
Заголовки.Вставить("Cookie", Куки);

Параметры = Новый Соответствие;
ДополнительныеПараметры = Новый Структура("ПараметрыЗапроса", Параметры);

Аутентификация = Новый Структура("login, Password","Мой логин","Мой пароль");

ДополнительныеПараметры.Вставить("Заголовки", Заголовки);
ДополнительныеПараметры.Вставить("Аутентификация", Аутентификация);
Результат = КоннекторHTTP.КакТекст(КоннекторHTTP.Post("https://b2b.tui.ua/default.php?page=cl_refer&CLAIM=4203868", Неопределено, ДополнительныеПараметры));
//ОтветСервера = Результат.ПолучитьТелоКакСтроку();
Данные = Новый Структура;
Данные.Вставить("samo_action", "logon");
Данные.Вставить("logon_key", ИдентификаторСессии);
Данные.Вставить("login", "Мой логин");
Данные.Вставить("passwd", "Мой Пароль");

Таймаут = Новый Структура("Таймаут", 5);
ДополнительныеПараметры.Вставить("Таймаут", Таймаут);

Ответ = КоннекторHTTP.Post("https://b2b.tui.ua/default.php?page=cl_refer&CLAIM=4203868", Данные);

Ответ = КоннекторHTTP.Post("https://b2b.tui.ua/default.php?page=cl_refer&CLAIM=4203868", Данные,ДополнительныеПараметры);
Показать
120. bonv 1510 10.12.19 19:10 Сейчас в теме
(119) Вы не совсем то, что нужно делаете.
Смотрите раздел Работа в рамках сессии. Там пример похож на то, что вам нужно
121. dimauspeh 20.12.19 16:21 Сейчас в теме
(120) Спасибо! Разобрался! В обычном приложении все супер. А как в УФ подключить библиотеку?
122. bonv 1510 20.12.19 17:08 Сейчас в теме
(121) Добавить общий модуль (просто скопировать из конфигурации библиотеки).
Работает только в серверном контексте исполнения
126. newtraveller 23 04.02.20 22:46 Сейчас в теме
Здорово что реализовали здорово что реализовали вычисление сигнатур S3. В свое время решал подобную задачу и в статье (https://infostart.ru/public/1189904/) описал идею тестирования корректности формирования подписи. Суть в том, что берем примеры с сайта Амазон. В них есть готовые исходные данные, промежуточные результаты и итог. Примеров несколько десятков. Вот вам идея для развития проекта.
127. gztrbnst 13.02.20 19:37 Сейчас в теме
Добрый день!
Подскажите, пожалуйста, есть ли в библиотеке возможность передать имя файла, чтобы результат запроса сохранялся в этот файл? (например, как через метод "Получить" у "HTTPСоединение")
143. bonv 1510 03.05.20 16:42 Сейчас в теме
128. kraynev-navi 647 26.02.20 11:07 Сейчас в теме
Добрый день! Спасибо за удобный инструмент!
Внесу свои 5 копеек.
При передачи параметра, содержащего закодированный урл с несколькими "вложенными параметрами" происходит некорректное декодирование.
Например урл: https://www.DOMEN.ru?URL_INNER=http%3A%2F%2Fwww.kuku.ru%2F%3Fs%3D1%26b%3D2&OTHER=1
Будет расценен как: https://www.DOMEN.ru?URL_INNER=http%3A%2F%2Fwww.kuku.ru%2F%3Fs%3D1&OTHER=1&b=2

Предлагаемое решение:
	
	//Запрос = РаскодироватьСтроку(Запрос, СпособКодированияСтроки.URLВКодировкеURL);
	//Для Каждого СтрокаКлючРавноПараметр Из СтрРазделить(Запрос, "&", Ложь) Цикл
	Для Каждого СтрокаКлючРавноПараметрЗакодированный Из СтрРазделить(Запрос, "&", Ложь) Цикл

		СтрокаКлючРавноПараметр = РаскодироватьСтроку(СтрокаКлючРавноПараметрЗакодированный , СпособКодированияСтроки.URLВКодировкеURL);
154. bonv 1510 11.05.20 19:08 Сейчас в теме
129. Beowolf707 17.03.20 11:40 Сейчас в теме
Добрый день, подскажите пожалуйста, выполняю запрос
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer "+ Токен);
Результат = ConnectorHTTP.Get("xxxxxxxxx:344/api/GetNewMessageID",, Новый Структура("Заголовки", Заголовки));

Код ответа 404, хотя в Postman все адекватно.

PS Разобрался, нужен был Post
130. fieryfist 15 26.03.20 16:07 Сейчас в теме
Есть небольшая ошибка в версии 1.3.4 в сроке №1939, если в заголовках передается host, значение заголовка дублируется, нужно добавить проверку
Если Не ЗаголовокHostЕстьВЗапросе Тогда
	ЗаголовокHostЕстьВЗапросе = Заголовок = "host";
КонецЕсли;


Автор, большое спасибо за труды!
144. bonv 1510 03.05.20 16:44 Сейчас в теме
(130) Исправлено.
Если host указывался, чтобы работать с нестандартными портами, то это исправлено тоже.
131. Fragster 1138 16.04.20 11:21 Сейчас в теме
Отличная вещь! Не нашел ответа на то, сжимает ли она запрос?
133. bonv 1510 16.04.20 19:21 Сейчас в теме
(131) Сжатия тела запроса пока нет. Только распаковка ответа.
Для какой задачи это нужно?
134. Fragster 1138 17.04.20 11:47 Сейчас в теме
(133) передавать большие порции хорошо сжимаемых данных через плохой канал, например выгрузку с ТСД с фуры "в полях".
145. bonv 1510 03.05.20 16:45 Сейчас в теме
(134) Возможность сжимать тело запроса появилась, но нужно понимать, что сервер должен быть настроен соответствующим образом
Fragster; +1 Ответить
228. eeeio 123 30.05.22 12:39 Сейчас в теме
(145) А что вы имеете в виду под "соответствующим образом"? Где прочитать или что погуглить?
229. bonv 1510 30.05.22 15:55 Сейчас в теме
(228) Например, для apache это делается таким образом
https://httpd.apache.org/docs/2.2/mod/mod_deflate.html#input

Либо бэкенд должен уметь сам распаковывать gzip
132. пользователь 16.04.20 14:33
Сообщение было скрыто модератором.
...
135. 7OH 69 22.04.20 18:37 Сейчас в теме
А может кто-то подсказать, как получить фотку из аутлука с авторизацией на офис 365 ?
Можно даже не за обычное спасибо.
Есть адрес https://eur.delve.office.com/mt/v3/people/profileimage?userId=xxxx&size=L
В браузере заходишь, появляется окошко офис365, прохожу авторизацию и получаю фотку.
А вот с коннектором чего-то не хотит - как редирект оно окно 365 не "хавает" и сразу возвращает 401.
137. leemuar 25.04.20 13:47 Сейчас в теме
(135) передавать данные авторизации в запросе. Но к этой бибилиотеке это не имеет никакого отношения. Судя по беглому поиску - там OAUTH: получаете авторизационный токен одним запросом, затем в остальных передаете этот токен
138. 7OH 69 25.04.20 15:27 Сейчас в теме
(137) было бы приятно, Если бв библиотека как и с редиректом это могла. А пока надо понимать самому, куда посылает исходный адрес и где авторизовываться в итоге.
139. leemuar 25.04.20 17:20 Сейчас в теме
(138) то что вы хотите - это не зона ответственности этой библиотеки. Это уже бизнес-логика поверх протокола HTTP. Вам стоит поискать библиотеку работы с Office 365 HTTP API. Ну или написать ее самому
136. Cyberhawk 135 25.04.20 12:50 Сейчас в теме
Запустил обработку "Тесты" из коробки, в конце выдает
<404> не равно <200>: 
{Обработка.Тесты.МодульОбъекта(895)}:		ВызватьИсключение(СтрШаблон("<%1> не равно <%2>: %3", ЛевоеЗначение, ПравоеЗначение, Пояснение));
{Обработка.Тесты.МодульОбъекта(519)}:	УтверждениеВерно(Ответ.КодСостояния, 200);
{Обработка.Тесты.МодульОбъекта(45)}:	Тест_PostИРедирект();
{Обработка.Тесты.Форма.Форма.Форма(18)}:		РеквизитФормыВЗначение("Объект").ВыполнитьТестыНаСервере();
{Обработка.Тесты.Форма.Форма.Форма(6)}:	ВыполнитьТестыНаСервере();
Во всплывающих сообщениях, тем не менее, все тесты предварены лычкой [OK].
146. bonv 1510 03.05.20 16:45 Сейчас в теме
(136) Работа с тестами поменялась. Если какой-то упадет, то будет сразу понятно какой именно
147. Cyberhawk 135 03.05.20 17:04 Сейчас в теме
148. bonv 1510 03.05.20 17:10 Сейчас в теме
(147) Выполнение тестов не останавливается на первом упавшем. Вообще можно скачать и посмотреть
149. Cyberhawk 135 03.05.20 17:11 Сейчас в теме
(148)
Выполнение тестов не останавливается на первом упавшем
Я выше привел пример противоположного: падает, не дождавшись завершения всех тестов
150. bonv 1510 03.05.20 17:16 Сейчас в теме
(149) Так я и пишу, что теперь все выбранные тесты отработают, даже если какие-то из них падают.
Ну падать к слову тоже ничего не должно
151. Cyberhawk 135 03.05.20 17:21 Сейчас в теме
(150) Так я и спрашиваю - что значит "теперь"?
152. bonv 1510 03.05.20 17:29 Сейчас в теме
(151)
Теперь это вот так
Но лучше скачать и посмотреть
Прикрепленные файлы:
140. malikov_pro 1292 03.05.20 10:03 Сейчас в теме
Не увидел обработку исключения при отсутствии связи по тайм ауту.
В моей реализации
Попытка
	HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Исключение
	СообщитьОбОшибке(ИмяОбмена, ОписаниеОшибки());
	Отказ = Истина;
	HTTPОтвет = Новый Структура;
	HTTPОтвет.Вставить("КодСостояния", 500);
КонецПопытки;
Показать
141. bonv 1510 03.05.20 16:17 Сейчас в теме
(140) Ошибка соединения (физически сервер выключен, используем неправильный адрес, прокси не указан и др.) и 500-ка (любая ошибка на сервере, ответ от балансера при выключенном бэкенде и др.) это все же совершенно разные вещи
153. malikov_pro 1292 03.05.20 18:14 Сейчас в теме
(141) С точки зрения прикладного уровня это ошибки транспортного уровня, по которой нужно прекратить выполнять процедуру и при необходимости откатить транзакцию.
Сейчас придется оборачивать в попытку ВызватьМетодВСеансе().
155. arti4k 31.05.20 10:31 Сейчас в теме
Подскажите пожалуйста нет ли видео по данному материалу?
156. bonv 1510 31.05.20 23:18 Сейчас в теме
(155) Видео нет. А зачем? Чего не хватает в текущем описании?
157. zeek 45 08.06.20 23:42 Сейчас в теме
А есть какой-то живой пример работы именно с Amazon, а не с yandex ?
158. bonv 1510 09.06.20 02:06 Сейчас в теме
(157) В тестах можно посмотреть
Процедура Тест_АутентификацияAWS4_HMAC_SHA256() Экспорт

Пример работы с сервисом Amazon SQS.

Если речь именно про S3, то разница с cloud.yandex.ru только в регионе и URL.
159. zeek 45 09.06.20 10:48 Сейчас в теме
(158) Вопрос именно по S3. Подставляю свои параметры доступа, пытаюсь запушить файл, но приходит ответ 400.
160. zeek 45 09.06.20 15:21 Сейчас в теме
161. Evg-Lylyk 4559 27.08.20 12:00 Сейчас в теме
Приветствую, при использовании возникла след. проблема
Задача: сгенерировать ссылку с параметрами и открыть ее на клиенте
Что то вроде: https://yandex.ru/?from=reg_portal&lang=ru
но модуль коннектора серверный и без вызова сервера
напрашивается часть модуля перенести в КлиентСервер
еще есть сценарии когда нужно делать HTTP запрос с клиента
162. artbear 1448 27.08.20 12:13 Сейчас в теме
(0) (161) Да, очень интересно, почему модуль только серверный, а не серверный-клиентский?

иногда нужно собирать\выполнять запросы и на клиенте
163. bonv 1510 04.09.20 16:37 Сейчас в теме
(161) Сейчас библиотека представляет из себя один модуль, который легко внедрять либо как общий модуль, либо скопировать содержимое в модуль обработки например.

(161)
(162) Что касается работы на клиенте. В тонком клиенте часть объектов не работает, в веб-клиенте не работает основная часть.

Мысли сделать версию, разбив на подмодули, у меня есть, но по срокам пока ничего не скажу
164. SlaSla 29 28.09.20 14:23 Сейчас в теме
Добрый день!

Подскажите плиз как используя данную библиотеку возможно работать через webdav яндекс-диска, (скачивать, закачивать, создавать урл для публичного доступа...)

В частности интересует как получить через webdav список файлов в папке яндекс диска.
165. JohnyDeath 301 28.09.20 18:04 Сейчас в теме
(164) может не совсем в тему, но подсмотреть можно здесь: https://github.com/kuntashov/oscript-yadisk
166. user1470505 29.09.20 14:40 Сейчас в теме
Запомним эту штуку на будущее
167. Pryanishnikov_Vladimir 02.10.20 11:22 Сейчас в теме
Как получить файл через Post запрос используя Вашу библиотеку?
168. REWS-DES 19.10.20 13:19 Сейчас в теме
Подскажите как мне указать параметры НастройкиСериализацииJSON

НастройкиСериализацииJSON.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.ЛокальнаяДатаСоСмещением;

Чтобы JSON Записал дату Со Смещением, а прочитал так как это работает
ПреобразованиеДат = СтрРазделить(ИменаСвойствСоЗначениямиДата, ",");
	
ДополнительныеПараметры = Новый Структура;
	
ПараметрыПреобразования = Новый Структура;
ПараметрыПреобразования.Вставить("ФорматДатыJSON", ФорматДатыJSON.ISO);
ПараметрыПреобразования.Вставить("ИменаСвойствСоЗначениямиДата", ПреобразованиеДат);
	
ДополнительныеПараметры.Вставить("ПараметрыПреобразованияJSON", ПараметрыПреобразования);
Показать
169. stos 34 19.10.20 19:56 Сейчас в теме
Добрый день!


Как можно отправить POST запрос, если в api задана схема запроса:
{
file_descr : String,
file_type : String,
file : file
}
т.е. два поля строкового типа, а третье - двоичные данные
170. stos 34 20.10.20 12:01 Сейчас в теме
171. GrRusel 28.01.21 17:01 Сейчас в теме
День добрый.
Помогите разобраться.
Отправляю в PostMan запрос и получаю ответ. Всё ок(см.прикреп.изображение).
А через Коннектор:
Результат = КоннекторHTTP.PostJson("mobile.api.crpt.ru/mobile/check", Новый Структура("code", "046064860301570000000093236"));

вываливается с ошибкой: Ошибка работы с Интернет: Server returned nothing (no headers, no data)
Там сначала приходит ответ 307. Идёт повторный запрос но уже на https и в этом запросе уже вставляется аутентификация и соотв. тут же валится :(
Прикрепленные файлы:
172. bonv 1510 28.01.21 18:55 Сейчас в теме
(171) Адрес указывать нужно полный, со схемой https://mobile.api.crpt.ru/mobile/check
173. GrRusel 28.01.21 19:07 Сейчас в теме
(172)
Указывал.
Тогда сразу валится: "Ошибка работы с Интернет: Server returned nothing (no headers, no data)", даже не получая 307 ответ.
174. bonv 1510 28.01.21 19:18 Сейчас в теме
(173) Судя по картинке в Postman указывается какой-то дополнительный заголовок, который не указывается в Коннекторе

даже не получая 307 ответ.

Потому что код 307 используется, чтобы сделать редирект с http на https. Если указывать схему сразу правильно, то этого лишнего редиректа не будет
175. GrRusel 29.01.21 10:30 Сейчас в теме
(174) Да вы правы, не хватало одного заголовка. Всё ок. Спасибо, вопрос закрыт
176. user624032_marcel.zglavutsa 09.03.21 15:07 Сейчас в теме
Друзья, подскажите:
Нужно отправить пост запрос с простой строкой в теле ("X,1,______,_,__;;;;;;;");
какая конструкция должна быть с использованием этого коннектора?
Заранее блогодарен.
177. bonv 1510 10.03.21 17:54 Сейчас в теме
(176) см. в описании раздел Отправка произвольных данных
178. kaliuzhnyi 135 01.04.21 01:19 Сейчас в теме
Давно увидел этот проект, но все как-то оттягивал его внедрение. И вот теперь я жалею, что так долго тянул время!

Автору большое уважение и признание. Проект действительно упрощает и ускоряет разработку.

Очень надеюсь на развитие проекта!
mc2; bonv; +2 Ответить
179. rozer 306 01.04.21 08:07 Сейчас в теме
не очень понял версии за 1-10 sm и платные чем отличаются ?
180. JohnyDeath 301 01.04.21 09:49 Сейчас в теме
(179) ни чем, это просто благодарность автору. Сколько не жалко, такую и качаешь
181. rozer 306 01.04.21 12:54 Сейчас в теме
(180) спасибо )

интересно что на такое ответила "техподдержка"

Добрый день, Роман.
Файлы за стартмани не являются готовым решением. Это примеры, шаблоны, алгоритмы, "стройматериалы" для вашей учетной системы (для других программистов). Нет гарантии работоспособности. Вы скачиваете и используете на свой страх и риск. Готовые коммерческие решения с техподдержкой только за рубли.
182. rozer 306 01.04.21 12:55 Сейчас в теме
и теперь я в смятении техподдержка - это автор или это ребята которые спрашивают у автора и "передают дальше" ))
183. MovaRemi 12.04.21 17:54 Сейчас в теме
Здравствуйте!
Есть задача передать файл POST-запросом в теле запроса в параметре "data", куда помещаю файл в виде base64-строки. Использование вашего метода через структуру Файлы.Вставить("Данные", Base64Значение()) не могу использовать, потому что в структуре нет свойства "data". Пробовал обходными путями с помощью ДополнительныеПараметры.Данные, но не получается.
Возможно вашим инструментом это сделать?
Вот пример фрагмента тела запроса, который я пытаюсь сделать:
{
"data": "data:image/gif;base64,R0lGODlhEgASAIIAAHqIltvp9/L4/+nz/+by/5imtN7s+gAAACH5BAAAAAAA­LAAAAAASABIAAAhxAAsIHEiwIEEBCBMqXChAIMOHCR1CfChwgIGLGDNmHFBR­o0eMHAtYxAgAAEmTF0OOvFjSZEuQHTO2LLkxpkyaNUVqnIkypU0DL1/61Hmy­6NCVH3MSSOqRgEACAQxEnSq1alSnBaAG2Mq1K1esBsMSDAgAOw=="
}
184. bonv 1510 13.04.21 00:45 Сейчас в теме
(183)
Json = Новый Структура("data", "data:image/gif;base64," + Base64Строка(Картинка));
Ответ = КоннекторHTTP.Post(url, Неопределено, Новый Структура("Json", Json));

// Или просто 
Результат = КоннекторHTTP.PostJson(url, Json);
MovaRemi; +1 Ответить
185. trio-tlt 21.04.21 08:20 Сейчас в теме
Привет.

Есть вот такой json для вэб-хука discord
{
"username": "Webhook",
"avatar_url": "https://i.imgur.com/4M34hi2.png",
"content": "Text message. Up to 2000 characters.",
"embeds": [
{
"author": {
"name": "Birdie♫",
"url": "https://www.reddit.com/r/cats/",
"icon_url": "https://i.imgur.com/R66g1Pe.jpg"
},
"title": "Title",
"url": "https://google.com/",
"description": "Text message. You can use Markdown here. *Italic* **bold** __underline__ ~~strikeout~~ [hyperlink](https://google.com) `code`",
"color": 15258703,
"fields": [
{
"name": "Text",
"value": "More text",
"inline": true
},
{
"name": "Even more text",
"value": "Yup",
"inline": true
},
{
"name": "Use `\"inline\": true` parameter, if you want to display fields in the same line.",
"value": "okay..."
},
{
"name": "Thanks!",
"value": "You're welcome :wink:"
}
],

"image": {
"url": "https://i6.imageban.ru/out/2021/04/20/298f63631d98fd9718c3a67e4be2b5ab.jpg"
},
"footer": {
"text": "Woah! So cool! :smirk:",
"icon_url": "https://i.imgur.com/fKL31aD.jpg"
}
}
]
}

В методе КоннекторHTTP.PostJson() можно передать структурой, которая потом преобразуется в json. Но, чтобы описать такую структуру надо не хило так заморочиться...
Пробовал передавать готовый json прям текстом, но в результате текст json изменяется: добавляются /n,/...
"{\n\"username\": \"Webhook\",\n\"avatar_url\": \"https://i.imgur.com/4M34hi2.png\",\n\"content\": \"Text me

Пробовал победить это с помощью
ДополнительныеПарамеры = новый Структура;
	
	ПараметрыЗаписиJSON = Новый Структура;
	ПараметрыЗаписиJSON.Вставить("ПереносСтрок", ПереносСтрокJSON.Авто);
	ПараметрыЗаписиJSON.Вставить("СимволыОтступа", " ");
	ПараметрыЗаписиJSON.Вставить("ИспользоватьДвойныеКавычки", Истина);
	ПараметрыЗаписиJSON.Вставить("ЭкранированиеСимволов", ЭкранированиеСимволовJSON.Нет);
	ПараметрыЗаписиJSON.Вставить("ЭкранироватьУгловыеСкобки", Ложь);
	ПараметрыЗаписиJSON.Вставить("ЭкранироватьРазделителиСтрок", Ложь);
	ПараметрыЗаписиJSON.Вставить("ЭкранироватьАмперсанд", Ложь);
	ПараметрыЗаписиJSON.Вставить("ЭкранироватьОдинарныеКавычки", Ложь);
	ПараметрыЗаписиJSON.Вставить("ЭкранироватьСлеш", Ложь);
	
	ДополнительныеПарамеры.Вставить("ПараметрыЗаписиJSON", ПараметрыЗаписиJSON);
	
	Результат = КоннекторHTTP.PostJson("http://httpbin.org/post", JSON, ДополнительныеПарамеры);
Показать

Не получается...

Было бы круто сделать некоторый ключ, при наличии которого переданный JSON вообще бы никак не обрабатывался
186. ivangrant 10 26.04.21 12:28 Сейчас в теме
Чем отличаются между собой четыре одинаковых по названию файла?
"Коннектор: удобный HTTP-клиент для 1С:Предприятие 8".
Написано: "просто скопируйте в общий модуль". Что именно копировать? В каком формате у вас файлы?
189. bonv 1510 04.05.21 23:35 Сейчас в теме
(186)
Чем отличаются между собой четыре одинаковых по названию файла?

Файлы одинаковые. Сумма оплаты выбирается по желанию

Написано: "просто скопируйте в общий модуль". Что именно копировать? В каком формате у вас файлы?

Файл cf, из которого можно скопировать общий модуль как общий модуль к себе в конфигурацию/расширение или скопировать текст и вставить например в обработку
187. kaliuzhnyi 135 28.04.21 23:10 Сейчас в теме
Добрый день коллеги.
Вопрос касательно лицензии - можно включать данную библиотеку в свои разработки?
188. bonv 1510 04.05.21 23:30 Сейчас в теме
(187) Можно, при условии сохранения преамбулы модуля с лицензией
190. minotavr_x86 8 12.05.21 14:09 Сейчас в теме
Переписал что бы работало в режиме совместимости с 8.2 на платформе 8.3.18.
Добавляем функции в конец модуля. Там где используется поиск с конца заменяем на функцию СтрНайтиСКонца и написана функция СтрЗаканчиваетсяНа там соответственно ничего менять не надо. Еще есть место где в функции СтрНайти указано СНачала просто трем.

Функция РазвернутьСтроку(СтрокаИсходная)
	ДлиннаСтроки = СтрДлина(СтрокаИсходная);
	
	РазвернутаяСтрока = "";
	Для инд = 0 по ДлиннаСтроки -1 Цикл
		РазвернутаяСтрока = РазвернутаяСтрока + Сред(СтрокаИсходная, ДлиннаСтроки -  инд, 1);	
	КонецЦикла;
	Возврат РазвернутаяСтрока;
КонецФункции

Функция СтрНайтиСКонца(СтрокаИсходная, СтрокаПоиска) Экспорт
	ДлиннаСтроки = СтрДлина(СтрокаИсходная);
	ДлиннаСтрокиПоиска = СтрДлина(СтрокаПоиска);  

	РазвернутаяСтрока = РазвернутьСтроку(СтрокаИсходная);
	РазвернутаяСтрокаПоиска = РазвернутьСтроку(СтрокаПоиска); 

	НомерСимвола = СтрНайти(РазвернутаяСтрока, РазвернутаяСтрокаПоиска);
	Если НомерСимвола <> 0 Тогда  
		НомерСимвола = ДлиннаСтроки - (НомерСимвола + ДлиннаСтрокиПоиска) + 2 ;
	КонецЕсли;
	Возврат НомерСимвола;
КонецФункции

Функция СтрЗаканчиваетсяНа(СтрокаИсходная, СтрокаПоиска)
	ДлиннаСтроки = СтрДлина(СтрокаИсходная);
	ДлиннаСтрокиПоиска = СтрДлина(СтрокаПоиска);  

	Концовка  = Прав(СтрокаИсходная, ДлиннаСтрокиПоиска ); 
	Возврат Концовка = СтрокаПоиска;
КонецФункции
Показать
Namihika; mip128; +2 Ответить
191. gepar1020 04.06.21 14:38 Сейчас в теме
Добрый день! Post запрос с digest-анутификацией не работает. Возвращает 401
192. bonv 1510 08.06.21 04:44 Сейчас в теме
(191) Можно увидеть пример запроса?
193. gag65 10.06.21 01:58 Сейчас в теме
Чем отличаются файлы cf за 1, 3, 5 и 10 стартмани?
194. bonv 1510 12.06.21 16:03 Сейчас в теме
(193) Файлы одинаковые. Сами можете выбрать сколько готовы заплатить
Оставьте свое сообщение