Коннектор: удобный 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 не будет опубликован. Обязательные поля помечены *