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

Коннектор — библиотека для работы с 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
  • Basic, Digest и AWS4-HMAC-SHA256 аутентификация
  • Автоматическое разрешение редиректов
  • Установка и чтение Cookies
  • Работа в рамках сессии с сохранением состояния (cookies, аутентификация и пр.)
  • Переиспользование HTTPСоединение в рамках сессии
  • Работает в т.ч. и на мобильной платформе
  • Доступна версия для 1Script
  • И многое другое

Требования

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

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

1Script >=1.1.1

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

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

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

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-декодирование

 

Таймаут

 

Basic-аутентификация

 

Digest-аутентификация

 

AWS4-HMAC-SHA256-аутентификация

 

Доступ через прокси-сервер

 

Поддерживаемые HTTP методы

 

Редиректы (Перенаправления)

 

Проверка серверного сертификата SSL

 

Клиентские сертификаты

 

Работа с Cookies

 

Работа в рамках сессии

Как скачать

Исходники доступны на GitHub’e.

Если возникло желание внести материальный вклад в дальнейшее развитие или просто отблагодарить автора, можно скачать библиотеку за SM.

97 Comments

  1. user1131250

    Плюсанул на звездочке. Ну, круто, чувак, круто, поздравляю! 🙂

    Reply
  2. Labotamy

    (1)не автора надо поздравлять, а слобщество. Поздравляю всех 1с ников с появлением request!

    Reply
  3. Labotamy

    Требую включения в состав БСП))

    Reply
  4. krollzlat

    Отлично ,жалко не хватает СМ.Когда рекод работаешь с http забывается…А тут и шпоргалка и удобство.

    Reply
  5. toypaul

    Алилуя.

    Reply
  6. zeegin

    (3) БСП поставляется по CC-BY, а тут Apache. Разве можно включить?

    https://softwareengineering.stackexchange.com/questions/170185/is-creative-commons-license-compatible-with-apache-license

    Вот ребята пишут что нельзя.

    Reply
  7. leemuar

    Отличная библиотека, спасибо!

    А имеет большой смысл привязываться к 8.3.10? Да, работа с потоками эффективна с т.зр. расходования памяти, но если убрать потоки можно расширить количество конфигураций, на которых библиотеку можно применять.

    Reply
  8. json

    (7) присоединяюсь к вопросу.

    Можно ли будет использовать для более старых конфигураций?

    УПП, например очень часто встречается: версия платформы 8.3.10 и выше, но режим совместимости 8.2.13

    Reply
  9. tsukanov

    Годнота пошла в топе. Неужели темные времена на инфостарте закончились )

    Reply
  10. kuntashov

    Очень круто (и почему раньше никто не реализовал?!), даешь порт для OScript!

    Reply
  11. comol

    Однозначный плюс — спасибо

    Reply
  12. the1

    (4) Народ, переведите кто-нибудь? Хотелось бы, так сказать, в общих чертах понять, что интурист говорит.

    Reply
  13. spy-83

    Молодец. Круто

    Reply
  14. saa@kuzov.org

    Спасибо!

    Очень вовремя, а то писал какие-то свои реализации частных случаев.

    Подскажите, может есть на Python библиотека для «другой стороны»? Я, в основном, на 1С делаю http-сервисы, так же была идея как-то унифицировать обработку входящих запросов, возврат значений и ошибок, webhook’и, подписки.

    Reply
  15. bonv

    (14)

    Подскажите, может есть на Python библиотека для «другой стороны»?

    Их там много. В самом python более богатые средства работы с HTTP, чем в 1С.

    Самый простой Bottle

    https://aiohttp.readthedocs.io/

    https://www.tornadoweb.org/

    http://flask.pocoo.org/

    https://bottlepy.org

    https://www.djangoproject.com/

    Reply
  16. bonv

    (7)(8) Ну дело не только в потоках. В принципе портировать на 8.2 можно

    Reply
  17. MCV

    Однозначный плюс!

    Reply
  18. Labotamy

    (6)Тогда точно такой же, только больше и другой =))

    Reply
  19. Labotamy

    Упс кнопкой ошибся..

    Reply
  20. bonv

    (6) всегда можно договориться )

    Reply
  21. zeegin

    (20) Я бы с удовольствием всю подсистему получения файлов из интернета заменил на это, за исключением настроек прокси: их всегда брать из настроек БСП и не предлагать переопределять.

    Reply
  22. JohnyDeath

    Крутой наборчик, спасибо!

    Вопрос: а нет ли библиотеки, которая разбирает фильтры OData в какой-нибудь удобный вид?

    Надо делать хттп-сервис в 1с, который бы поддерживал базовые фильтры в стиле OData. Наверняка это уже где-то сделано.

    Reply
  23. AlexeyDmuhin

    Отличная работа! Спасибо!

    Reply
  24. rwn_driver

    Сильно! Спасибо!!!

    Reply
  25. YourHelper

    Отличная штука. Ещё бы бьютифул суп сделать для 1с

    Reply
  26. YourHelper

    При переборе куков нужно добавить проверку на то, что есть не только ключ, но значение, а то крашится.

    Reply
  27. bonv

    (26) пример запроса можно?

    Reply
  28. YourHelper

    (27)Авито пробовал, например, https://www.avito.ru/rostov-na-donu/lichnye_veschi?s_trg=10

    Reply
  29. bonv

    (26) пофиксил

    Reply
  30. MCV

    Сам python нужен для работы библиотеки?

    Reply
  31. bonv

    (30) Нет

    Reply
  32. 7OH

    {ОбщийМодуль.КоннекторHTTP.Модуль(1502)}: Ошибка при вызове метода контекста (ПрочитатьJSON)

    Объект = ПрочитатьJSON(

    по причине:

    Непредвиденный символ при чтении JSON

    А вот , что выдаёт в ответе PostMan

    {
    «Успех»: true,
    «ФИО»: {
    «Фамилия»: «Пупкин»,
    «Имя»: «Африкан»,
    «Отчество»: «Свиридович»
    },
    «ДР»: «2013-03-18T09:53:27»,
    «Дети»: [
    «Вася»,
    «Лена»
    ]
    }

    Показать

    А вот код, собирающий ответ

    Кодировка = «UTF-8»;
    
    ЗаписьJSON = Новый ЗаписьJSON();
    
    ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб);
    
    ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
    
    ЗаписатьJSON(ЗаписьJSON, Данные);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    Ответ = Новый HTTPСервисОтвет(200);
    
    Ответ.УстановитьТелоИзСтроки(СтрокаJSON, Кодировка, ИспользованиеByteOrderMark.НеИспользовать);
    
    Возврат Ответ;

    Показать

    Что не так ?

    Reply
  33. bonv

    (32) Нужно попробовать сделать так:

    Ответ = КоннекторHTTP.Get(«……»);
    Сообщить(Ответ.КодСостояния);
    Сообщить(КоннекторHTTP.КакТекст(Ответ));

    Скорей всего по какой-то причин ответ пришел не в формате JSON

    Reply
  34. 7OH

    (33)

    ообщить(Ответ.КодСостояния); Сообщить(КоннекторHTTP.КакТекст(Ответ));

    Спасибо.

    Полдела есть «<title>IIS 10.0 Detailed Error — 401.5 — Unauthorized</title> »

    Вот код

    Аутентификация = Новый Структура(«Пользователь, Пароль», «1cuser», «1cparol»);
    
    Ответ = КоннекторHTTP.Get(«http://111.222.333.444/base/hs/service/Test», Новый Структура(«Аутентификация», Аутентификация));
    
    Сообщить(Ответ.КодСостояния);

    Вызов же вроде верный.

    Reply
  35. bonv

    (34) В публикации сервиса в IIS используется анонимная аутентификация?

    Reply
  36. 7OH

    (33)Ещё раз спасибо. Одной запятой перед параметрами не хватило.

    Не рассмотрел в примере из шапки 2 запятые в конце.

    Reply
  37. leobrn

    подскажите, как задать параметр ассоциативный массив? (sort[updated_at]=3)

    http://direct.ru/lead/25/list?sort[updated_at]=3

    Пробовал так:

    П

    араметрыЗапроса = Новый Структура;
    
    СтруктураСортировка = Новый Соответствие;
    СтруктураСортировка .Вставить(«updated_at «,3);
    
    ПараметрыЗапроса.Вставить(«sort», СтруктураСортировка );
    Reply
  38. bonv

    (37)

    Поправил ошибку.

    Должно работать так:

    ПараметрыЗапроса = Новый Соответствие;
    ПараметрыЗапроса.Вставить(«sort[updated_at]», «3»);
    
    Ответ = КоннекторHTTP.Get(«http://direct.ru/lead/25/list», ПараметрыЗапроса);
    Reply
  39. leobrn

    (38)

    sort[updated_at]

    взлетело, спасибо

    Reply
  40. MCV

    (32)

    Тож самое.

    Reply
  41. MCV

    (33) На том же попался, что при отправке POST ошибка на непредвиденный символ

    Только у меня GET возвращает корректные данные.

    в описании API

    ….

    Client : Работа с клиентами Show/Hide List Operations Expand Operations

    GET /client Получение списка клиентов

    POST /client Создание клиента

    GET /client/{id} Получение клиент по ID

    PUT /client/{id} Обновление клиента по ID

    Но ошибка явно кроется в том, что отвечает сервер об ошибке.

    В отладчике:

    Ответ.КодСостояния = 500

    Ответ.Тело= 43 44 62 43 6F 6D … ДвоичныеДанные

    В теле ответа есть двоичные данные. Очевидно там сервер пишет о своей проблеме в виде строки.

    Я бы поправил

    Объект = ПрочитатьJSON(…)

    через попытку.

    Если вышло исключение , то вернуть тело как строку (затолкнув ее в структуру для совместимости типов возвращаемых значений этой функции).

    Проще говоря: не всегда на /POST приходит ответ в том, в чем отправили))

    Reply
  42. bonv

    (41) Текст ошибки можно посмотреть если вызвать КакТекст.

    Вообще, безопасный алгоритм такой:

    Ответ = КоннецкторHTTP.Post();
    Если Ответ.КодСостояния = 200 Тогда // Зависит от сервиса, где-то и на ошибки возвращать будут JSON
    Результат = КоннекторHTTP.КакJson(Ответ);
    Иначе
    ВызватьИсключение(КоннекторHTTP.КакТекст(Ответ));
    КонецЕсли;
    
    Reply
  43. MCV

    (42)

    Текст ошибки можно посмотреть если вызвать КакТекст.

    Именно так.

    Я не совсем понятно описал суть:

    Результат =КоннекторHTTP.PostJson(«http://demo1.aut…………./call»,Содержимое,Новый Структура(«Аутентификация», ПараметрыЗапроса));

    Если Результат.Получить(«success») Тогда

    …..

    ….

    Иначе

    Для Каждого ЗаписьОтвета Из Результат.Получить(«errors») Цикл

    …….

    …….

    PostJson не всегда возвращает ожидаемый результат.

    Бывают ситуации, когда сервер вернет не 200, а кодСостояния =500 (да много их там), то тело будет содержать в себе не Json, а текст (или xml).

    Ошибка возникает именно в строке 1502 , как писали в (32)

    Reply
  44. MCV

    (42) Я не совсем понятно выразился.

    Использую

    Результат =КоннекторHTTP.PostJson(«http://demo1.auXXXXXXX»,Содержимое,Новый Структура(«Аутентификация», ПараметрыЗапроса));
    Если Результат.Получить(«success») Тогда
    …
    Иначе
    Для Каждого ЗаписьОтвета Из Результат.Получить(«errors») Цикл
    …
    

    Не всегда ответ содержит именно Json. И ошибка в модуле коннектора стр. 1503 как писали в (32).

    Я в (41) предложил)

    Reply
  45. leemuar

    (16) когда ждать порт? Или куда приcылать pull request? Или лучше сделать свой форк?

    Reply
  46. bonv

    (45) Лучше свой форк, т.к. реализации будут не совместимы из-за функций работы со строками

    Reply
  47. leemuar

    (47) в чем именно будет несовместимость? Быстрый анализ кода не выявил каких-то сложностей с заменой встроенных функций работы со строками на самописные. Что я проглядел?

    Reply
  48. bonv

    (48) СтрНайти и Найти

    То что сейчас работает Найти, это не значит, что она будет работать в следующей версии платформы

    Reply
  49. GreenDragon

    (46) Даже библиотеку запилил? Просто огонь! Моё увОжение…

    Reply
  50. leemuar

    (12) «Отличная разработка! Жалко стартмани не хватает, чтобы скачать. Когда редко работаешь с http — забывается. А тут и документация отличная, и сама библиотека удобная»

    Reply
  51. leemuar

    Форк для режима совместимости 8.3.5: https://github.com/leemuar/Connector

    Reply
  52. Forest83

    Добрый день!

    1. Какой логин и пароль для обработки тестирования?

    2. Как правильно вызвать метод POST c телом из JSON?

    При вызове метода PostJson

    Выдает ошибку: {ОбщийМодуль.КоннекторHTTP.Модуль(1531)}: Ошибка при вызове метода контекста (ПрочитатьJSON): Недопустимое состояние потока записи JSON

    Хотелось бы описание ошибок и примеры по основным методам с данными с которыми будет формироваться запрос.

    Reply
  53. bonv

    (53)

    1. Какой логин и пароль для обработки тестирования?

    Обновил файл, теперь тест с доступом к сайту ИТС необязательный. Вообще, там нужен логин, пароль к веб-ИТС.

    2. Как правильно вызвать метод POST c телом из JSON?

    А пример можно? В параметр Json передается текст?

    Reply
  54. Forest83

    Передаю структуру.

    Reply
  55. bonv

    (55) Можно увидеть полный код вызова?

    Reply
  56. bonv

    (55) В ответе пришел не JSON

    Безопасный вариант

    Ответ = КоннекторHTTP.Post(….);
    Если Ответ.КодСостояния = 200 Тогда // Зависит от сервиса, где-то и на ошибки возвращать будут JSON
    Результат = КоннекторHTTP.КакJson(Ответ);
    Иначе
    ВызватьИсключение(КоннекторHTTP.КакТекст(Ответ));
    КонецЕсли;
    Reply
  57. Forest83

    Да возвращается не JSON, не понял из описания метода. POST отрабатывает корректно.

    И еще интересно, что при POST-запросе с JSON, если приходит редирект 301, то автоматически меняет метод на GET. И после этого ожидаемо падает с 405 кодом…

    Reply
  58. bonv

    (58)

    И еще интересно, что при POST-запросе с JSON, если приходит редирект 301, то автоматически меняет метод на GET. И после этого ожидаемо падает с 405 кодом…

    RFC 2068 запрещает автоматический редирект для POST если получен код 301.

    https://rfc2.ru/2068.rfc/53#p10.3.2

    В GET преобразуют большинство браузеров. Думаю стоит привести поведение к RFC — возвращать просто 301 в этом случае

    Reply
  59. Forest83

    Согласен.

    Либо как рекомендуют по ссылке выше: Если код состояния 301 был получен в ответ на запрос, отличный от GET или HEAD, агент пользователя НЕ ДОЛЖЕН автоматически переназначать запрос, пока нет подтверждения пользователя, так как иначе условия запроса изменятся.

    Reply
  60. nomadon

    (7) о каких именно потоках тут речь?

    Reply
  61. leemuar

    (61) о новых объектах в платформе 8.3.9+ таких как ПотокВПамяти, ФайловыйПоток и т.п. Подробнее сожно почитать тут: https://wonderland.v8.1c.ru/blog/novye-instrumenty-dlya-raboty-s-dvoichnymi-dannymi-obespechivayut-kak-posledovatelnyy-dostup-k-danny/

    Reply
  62. user774630

    Добрый день. NTLM аутентификация не поддерживается?

    Reply
  63. bonv

    (63) сейчас не поддерживается

    Reply
  64. bonv

    (63) Теперь поддерживается

    Reply
  65. TelsDevelopUser

    Не совсем понятно, каким образом можно передать

    1) в теле запроса сразу массив

    2) имена свойств с «-»

    Например:

    [
    {
    «ship-id»: «1», …}
    {
    «ship-id»: «1», …}
    ]

    Подскажите, пожалуйста, какого вида должны быть данные, передаваемые в доп. параметры структурой с именем «Данные»?

    Reply
  66. JohnyDeath

    (66) вангую, что надо вместо структуры использовать Соответствие

    Reply
  67. bonv

    (66)

    Можно так

    Json = Новый Массив;
    ВложенныйОбъект = Новый Соответствие;
    ВложенныйОбъект.Вставить(«ship-id», «1»);
    Json.Добавить(ВложенныйОбъект);
    
    Результат = КоннекторHTTP.PostJson(«https://httpbin.org/post», Json);
    
    Reply
  68. genayo

    Поддержка OAuth — авторизации не планируется?

    Reply
  69. bonv

    (69) Ну с OAuth не все так просто.

    Для каких сервисов нужно?

    Reply
  70. genayo

    (70) Да возникла задача интеграции с API с авторизацией через Bearer Token в http header.

    Reply
  71. bonv

    (71) Если токен есть, то достаточно заполнить заголовок

    Заголовки = Новый Соответствие;
    Заголовки.Вставить(«Authorization», «Bearer МойСуперСекретныйТокен»);
    Результат = КоннекторHTTP.GetJson(«http://httpbin.org/headers»,, Новый Структура(«Заголовки», Заголовки));
    Reply
  72. lefthander

    В разделе содержимое это правильно?

    //Цитата

    Чтение ответа как JSON

    Получить данные из ответа в виде десериализованного JSON можно с помощью метода КакJson.

    Результат = КоннекторHTTP.КакJson(КоннекторHTTP.Post((«http://httpbin.org/get»)));

    //Конец цитаты

    Reply
  73. bonv

    (73) Спасибо, поправил

    Reply
  74. TelsDevelopUser

    (68) Спасибо! И еще вопрос — можно ли как-нибудь и как получить статус HTTP-запроса (200, например) и другие корневые свойства в результате?

    Reply
  75. bonv

    (75) Все методы без суффикса Json возвращают структуру со свойствами ответа

    Т.е. вместо

    Результат = КоннекторHTTP.PostJson(«https://httpbin.org/post», Json);
    

    нужно использовать

    Ответ = КоннекторHTTP.Post(«https://httpbin.org/post», Json);
    Ответ.КодСостояния — то что нужно
    Результат = КоннекторHTTP.КакJson(Ответ);
    

    Вообще, в статье все это есть)

    Reply
  76. SlaSla

    Каким образом отправить чисто json строку через КоннекторHTTP.Post без предварительного преобразования в Соответствие?

    Reply
  77. SlaSla

    Какова должна быть структура-соответствие-масссив отправляемого через КоннекторHTTP.Post

    {«F»:[

    {«S»:{«code»:1,»price»:5,»name»:»Конфета»}},

    {«S»:{«code»:2,»price»:15,»name»:»Печенье», «qty»:0.5}},

    {«D»:{ «prc»:5, «all»:1}},

    ]}

    Reply
  78. bonv

    (78)

    F = Новый Структура;
    Объекты = Новый Массив;
    Объекты.Добавить(Новый Структура(«S», Новый Структура(«code,price,name», 1, 5, «Конфета»)));
    Объекты.Добавить(Новый Структура(«S», Новый Структура(«code,price,name,qty», 2, 15, «Печенье», 0.5)));
    Объекты.Добавить(Новый Структура(«D», Новый Структура(«prc,all», 5, 1)));
    F.Вставить(«F», Объекты);
    
    Ответ = КоннекторHTTP.PostJson(«http://httpbin.org/post», F);
    

    Показать

    Как-то так

    Reply
  79. SlaSla

    (79)Спасибо! Всё получилось!

    Reply
  80. Goleff74

    Добрый день.

    Нет ли в планах или загашниках добавить в библиотеку методов работы с нестандартными для 1С Soap сервисами, схемы которых 1С прочитать не в состоянии и приходится все это отсылать POST’ом, формируя тело самостоятельно?

    Reply
  81. bonv

    (81) Планы есть, но пока нет времени

    Reply
  82. user1166203

    А как в POST запрос передать тело в свободном виде? Не JSON.

    Reply
  83. bonv

    (83) какой формат этого тела? Что за данные?

    Reply
  84. user1166203

    (84)

    Текст. XML.

    Reply
  85. bonv

    (85) Обновил версию. Отправка выполняется таким образом

    XML =
    «<?xml version=»»1.0″» encoding=»»utf-8″»?>
    |<soap:Envelope xmlns:xsi=»»http://www.w3.org/2001/XMLSchema-instance»» xmlns:xsd=»»http://www.w3.org/2001/XMLSchema»» xmlns:soap=»»http://schemas.xmlsoap.org/soap/envelope/»»>
    |  <soap:Body>
    |    <GetCursOnDate xmlns=»»http://web.cbr.ru/»»>
    |      <On_date>2019-07-05</On_date>
    |    </GetCursOnDate>
    |  </soap:Body>
    |</soap:Envelope>»;
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить(«Content-Type», «text/xml; charset=utf-8»);
    Заголовки.Вставить(«SOAPAction», «http://web.cbr.ru/GetCursOnDate»);
    Ответ = КоннекторHTTP.Post(
    «https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx»,
    XML,
    Новый Структура(«Заголовки», Заголовки));
    

    Показать

    Reply
  86. for_sale

    (2)

    Жесть. Зашёл, думаю — что за сыр-бор. А тут все друг друга поздравляют с тем, что за 500 рублей продаётся штука из 10 строк?))) Это ж как одинэсники с интернетом работать не умеют, чтобы так радоваться))

    request, кстати, бесплатный))

    Reply
  87. JohnyDeath

    (88) кстати и это всё есть на гитхабе

    Reply
  88. bonv

    (88)

    А тут все друг друга поздравляют с тем, что за 500 рублей продаётся штука

    А вам я это покоя не дает? Если не способны заработать 500 рублей (вообще-то 5 стартмани), то я могу вам подарить

    штука из 10 строк?

    Это вы про свою разработку видимо?

    https://infostart.ru/public/1081151/

    Reply
  89. for_sale

    (89)

    А ссылку можно? В статье только за мани, поиск в гугле и гитхабе ничего не дал.

    Reply
  90. JohnyDeath

    (92) не знаю как вы искали, но у меня гитхаб поиском по «коннектор» выдает нужный репо в первой же строке

    Reply
  91. for_sale

    (93)

    коннектор

    Искал КоннекторHTTP. Спасибо, по коннектору нашёл

    Reply
  92. chipazawra

    (86) Приветствую!

    Хотел бы уточнить.

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

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

    Reply
  93. bonv

    (95)


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

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


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

    Да, в рамках сессии соединение будет сохраняться, но пока еще не сделал

    Reply
  94. chipazawra

    Есть 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, ДополнительныеПараметры);

    А так коннектор очень удобный. Пользуюсь, жду соединение в сессии.

    Reply
  95. vlad1976

    как тут

    данные в КоннекторHTTP.ВызватьМетодВСеансе Json передать?

    Ответ = КоннекторHTTP.ВызватьМетодВСеансе(Сессия, «POST», Ответ.URL, Json);

    Reply
  96. bonv

    (98)

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

    Вообще, у этого метода достаточно подробная документация

    Reply
  97. bonv

    (95)

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

    Теперь в рамках сессии HTTPСоединение переиспользуется

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *