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

Публикация № 709325 31.01.19

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

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

Коннектор - библиотека для работы с 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
 
Работа в рамках сессии
 
Повторные попытки соединения/отправки запроса

Специальные предложения

Вознаграждение за ответ
Показать полностью
Лучшие комментарии
46. bonv 1191 18.02.19 19:56 Сейчас в теме
UPDATE: Доступна версия для 1Script
opm install 1connector
iulyus; maksa2005; user859339; i_a; untru; Krio2; mickey.1cx; Perfolenta; karachev_og; kote; mvxyz; Evg-Lylyk; nixel; Danil.Potapov; ardarik; ardn; Aleskey_K; ktb; EGOLEGE; Merc; GreenDragon; +21 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. user1131250 31.01.19 08:02 Сейчас в теме
Плюсанул на звездочке. Ну, круто, чувак, круто, поздравляю! :)
kaliuzhnyi; Nefilimus; +2 Ответить
2. Labotamy 31.01.19 08:11 Сейчас в теме
(1)не автора надо поздравлять, а слобщество. Поздравляю всех 1с ников с появлением request!
kaliuzhnyi; Nefilimus; Rustig; +3 Ответить
88. for_sale 872 26.07.19 22:45 Сейчас в теме
(2)
Жесть. Зашёл, думаю - что за сыр-бор. А тут все друг друга поздравляют с тем, что за 500 рублей продаётся штука из 10 строк?))) Это ж как одинэсники с интернетом работать не умеют, чтобы так радоваться))
request, кстати, бесплатный))
Nefilimus; informa1555; sks; Tapochki-tmn; Pawlick; YARA; +6 Ответить
89. JohnyDeath 300 26.07.19 23:20 Сейчас в теме
(88) кстати и это всё есть на гитхабе
dimaster; Nefilimus; +2 Ответить
92. for_sale 872 29.07.19 16:18 Сейчас в теме
(89)
А ссылку можно? В статье только за мани, поиск в гугле и гитхабе ничего не дал.
93. JohnyDeath 300 29.07.19 19:44 Сейчас в теме
(92) не знаю как вы искали, но у меня гитхаб поиском по "коннектор" выдает нужный репо в первой же строке
94. for_sale 872 29.07.19 19:45 Сейчас в теме
(93)
коннектор

Искал КоннекторHTTP. Спасибо, по коннектору нашёл
90. bonv 1191 26.07.19 23:52 Сейчас в теме
(88)
А тут все друг друга поздравляют с тем, что за 500 рублей продаётся штука

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

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

Это вы про свою разработку видимо?
https://infostart.ru/public/1081151/
dimaster; AlexK_2012; Brook; jONES1979; WKBAPKA; serge_focus; TipsyKID; chng; kote; klaus38; dyuha; buganov; adhocprog; genayo; 7OH; +15 3 Ответить
91. for_sale 872 27.07.19 01:03 Сейчас в теме
(90)
Борода как у дядьки взрослого, а подгорает как у маленькой девочки)) Аж бедьненький полез смотреть мои разработки)))

Вообще я просто удивился тому, что у 1С-ников так сложно с работой с интернетом, что они сами три строки не могут написать и готовы выкладывать за это деньги)) Ну и попутно удивился тому, что человек берёт пример с бесплатных продуктов, но делает их даже не за 1 см, а аж за 5)) Но теперь-то я гораздо больше удивляюсь вашей ранимой душе и легковоспламенимой попке)))
jeyrico; user997352; jorelingo; user1302843; Roootru; informa1555; jONES1979; ivan_luzinov; vugluscr1991; +9 17 Ответить
3. Labotamy 31.01.19 08:12 Сейчас в теме
Требую включения в состав БСП))
user1463853; dimaster; kaliuzhnyi; user1302843; chemezov; WKBAPKA; Viktor_Ermakov; Krio2; ivan_luzinov; SagittariusA; user811769; creatermc; pt_olga; mysm; amon_ra; IP0808; Kosstikk; DrAku1a; +18 1 Ответить
6. zeegin 98 31.01.19 09:25 Сейчас в теме
(3) БСП поставляется по CC-BY, а тут Apache. Разве можно включить?

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

Вот ребята пишут что нельзя.
18. Labotamy 31.01.19 16:37 Сейчас в теме
(6)Тогда точно такой же, только больше и другой =))
20. bonv 1191 31.01.19 16:57 Сейчас в теме
(6) всегда можно договориться )
21. zeegin 98 31.01.19 20:43 Сейчас в теме
(20) Я бы с удовольствием всю подсистему получения файлов из интернета заменил на это, за исключением настроек прокси: их всегда брать из настроек БСП и не предлагать переопределять.
4. krollzlat 31.01.19 09:14 Сейчас в теме
Отлично ,жалко не хватает СМ.Когда рекод работаешь с http забывается...А тут и шпоргалка и удобство.
12. the1 977 31.01.19 12:11 Сейчас в теме
(4) Народ, переведите кто-нибудь? Хотелось бы, так сказать, в общих чертах понять, что интурист говорит.
AlexK_2012; WKBAPKA; user774630; Гриффин; +4 Ответить
51. leemuar 19.02.19 16:59 Сейчас в теме
(12) "Отличная разработка! Жалко стартмани не хватает, чтобы скачать. Когда редко работаешь с http - забывается. А тут и документация отличная, и сама библиотека удобная"
AlexK_2012; triera2000; LeXXeR; asisdes; so-quest; vvp117; shima; Daynestro07; user1147832; reset2; SanchoD; Fartovaya; user774630; Гриффин; Nefilimus; Aleskey_K; Kuzja_R; pbabincev; EasyWay; the1; +20 Ответить
5. toypaul 69 31.01.19 09:20 Сейчас в теме
7. leemuar 31.01.19 10:11 Сейчас в теме
Отличная библиотека, спасибо!
А имеет большой смысл привязываться к 8.3.10? Да, работа с потоками эффективна с т.зр. расходования памяти, но если убрать потоки можно расширить количество конфигураций, на которых библиотеку можно применять.
8. json 2999 31.01.19 10:32 Сейчас в теме
(7) присоединяюсь к вопросу.
Можно ли будет использовать для более старых конфигураций?
УПП, например очень часто встречается: версия платформы 8.3.10 и выше, но режим совместимости 8.2.13
16. bonv 1191 31.01.19 13:56 Сейчас в теме
(7)(8) Ну дело не только в потоках. В принципе портировать на 8.2 можно
45. leemuar 18.02.19 16:21 Сейчас в теме
(16) когда ждать порт? Или куда приcылать pull request? Или лучше сделать свой форк?
47. bonv 1191 19.02.19 11:49 Сейчас в теме
(45) Лучше свой форк, т.к. реализации будут не совместимы из-за функций работы со строками
48. leemuar 19.02.19 11:54 Сейчас в теме
(47) в чем именно будет несовместимость? Быстрый анализ кода не выявил каких-то сложностей с заменой встроенных функций работы со строками на самописные. Что я проглядел?
49. bonv 1191 19.02.19 11:59 Сейчас в теме
(48) СтрНайти и Найти
То что сейчас работает Найти, это не значит, что она будет работать в следующей версии платформы
123. legrey 67 22.01.20 14:01 Сейчас в теме
(45) Получилось портировать для релизов ниже 8.3.9 ?
124. leemuar 22.01.20 16:21 Сейчас в теме
(123) https://github.com/leemuar/Connector
Не все возможности оригинала поддерживаются. Например, сжатие не работает пока
61. nomadon 419 02.05.19 09:21 Сейчас в теме
(7) о каких именно потоках тут речь?
62. leemuar 02.05.19 17:13 Сейчас в теме
(61) о новых объектах в платформе 8.3.9+ таких как ПотокВПамяти, ФайловыйПоток и т.п. Подробнее сожно почитать тут: https://wonderland.v8.1c.ru/blog/novye-instrumenty-dlya-raboty-s-dvoichnymi-dannymi-obespechivayut-kak-posledovatelnyy-dostup-k-danny/
9. tsukanov 31.01.19 10:38 Сейчас в теме
Годнота пошла в топе. Неужели темные времена на инфостарте закончились )
Gang031; Orlando Skibraves; user764477; sigmov; TreeDogNight; DrAku1a; Alien_job; rpgshnik; zeegin; Labotamy; CyberCerber; SerVer1C; Soloist; the1; +14 Ответить
10. kuntashov 420 31.01.19 10:43 Сейчас в теме
Очень круто (и почему раньше никто не реализовал?!), даешь порт для OScript!
creatermc; Labotamy; +2 Ответить
11. comol 4739 31.01.19 11:34 Сейчас в теме
Однозначный плюс - спасибо
13. spy-83 192 31.01.19 12:51 Сейчас в теме
14. saa@kuzov.org 31.01.19 13:45 Сейчас в теме
Спасибо!
Очень вовремя, а то писал какие-то свои реализации частных случаев.

Подскажите, может есть на Python библиотека для "другой стороны"? Я, в основном, на 1С делаю http-сервисы, так же была идея как-то унифицировать обработку входящих запросов, возврат значений и ошибок, webhook'и, подписки.
kote; MarkoSokolov; +2 1 Ответить
15. bonv 1191 31.01.19 13:53 Сейчас в теме
(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/
kote; eeeio; mysm; IgorArhangel; saa@kuzov.org; JohnyDeath; Il; +7 Ответить
17. MCV 31.01.19 14:10 Сейчас в теме
19. Labotamy 31.01.19 16:38 Сейчас в теме
22. JohnyDeath 300 01.02.19 08:51 Сейчас в теме
Крутой наборчик, спасибо!

Вопрос: а нет ли библиотеки, которая разбирает фильтры OData в какой-нибудь удобный вид?
Надо делать хттп-сервис в 1с, который бы поддерживал базовые фильтры в стиле OData. Наверняка это уже где-то сделано.
TreeDogNight; +1 Ответить
23. AlexeyDmuhin 01.02.19 09:35 Сейчас в теме
Отличная работа! Спасибо!
24. rwn_driver 8 01.02.19 15:42 Сейчас в теме
25. Ktuhh 02.02.19 12:51 Сейчас в теме
Отличная штука. Ещё бы бьютифул суп сделать для 1с
26. Ktuhh 03.02.19 13:11 Сейчас в теме
При переборе куков нужно добавить проверку на то, что есть не только ключ, но значение, а то крашится.
27. bonv 1191 03.02.19 13:25 Сейчас в теме
28. Ktuhh 03.02.19 16:46 Сейчас в теме
29. bonv 1191 03.02.19 18:00 Сейчас в теме
30. MCV 04.02.19 16:11 Сейчас в теме
Сам python нужен для работы библиотеки?
31. bonv 1191 04.02.19 16:42 Сейчас в теме
32. 7OH 32 07.02.19 14:17 Сейчас в теме
{ОбщийМодуль.Коннектор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.НеИспользовать);

Возврат Ответ;
Показать


Что не так ?
33. bonv 1191 07.02.19 15:07 Сейчас в теме
(32) Нужно попробовать сделать так:
Ответ = КоннекторHTTP.Get("......");
Сообщить(Ответ.КодСостояния);
Сообщить(КоннекторHTTP.КакТекст(Ответ));


Скорей всего по какой-то причин ответ пришел не в формате JSON
34. 7OH 32 07.02.19 15:29 Сейчас в теме
(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", Новый Структура("Аутентификация", Аутентификация));

Сообщить(Ответ.КодСостояния);


Вызов же вроде верный.
35. bonv 1191 07.02.19 15:32 Сейчас в теме
(34) В публикации сервиса в IIS используется анонимная аутентификация?
36. 7OH 32 07.02.19 15:35 Сейчас в теме
(33)Ещё раз спасибо. Одной запятой перед параметрами не хватило.
Не рассмотрел в примере из шапки 2 запятые в конце.
41. MCV 10.02.19 09:34 Сейчас в теме
(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 приходит ответ в том, в чем отправили))
42. bonv 1191 10.02.19 15:01 Сейчас в теме
(41) Текст ошибки можно посмотреть если вызвать КакТекст.

Вообще, безопасный алгоритм такой:
Ответ = КоннецкторHTTP.Post();
Если Ответ.КодСостояния = 200 Тогда // Зависит от сервиса, где-то и на ошибки возвращать будут JSON
    Результат = КоннекторHTTP.КакJson(Ответ);
Иначе
    ВызватьИсключение(КоннекторHTTP.КакТекст(Ответ));
КонецЕсли;
androgin; +1 Ответить
43. MCV 10.02.19 20:41 Сейчас в теме
(42)
Текст ошибки можно посмотреть если вызвать КакТекст.

Именно так.

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

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

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


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

Ошибка возникает именно в строке 1502 , как писали в (32)
44. MCV 10.02.19 20:49 Сейчас в теме
(42) Я не совсем понятно выразился.

Использую

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


Не всегда ответ содержит именно Json. И ошибка в модуле коннектора стр. 1503 как писали в (32).
Я в (41) предложил)
40. MCV 09.02.19 13:55 Сейчас в теме
37. leobrn 485 08.02.19 12:38 Сейчас в теме
подскажите, как задать параметр ассоциативный массив? (sort[updated_at]=3)

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

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

П
араметрыЗапроса = Новый Структура;

	СтруктураСортировка = Новый Соответствие;
	СтруктураСортировка .Вставить("updated_at ",3);
	
	ПараметрыЗапроса.Вставить("sort", СтруктураСортировка );
38. bonv 1191 08.02.19 13:03 Сейчас в теме
(37)

Поправил ошибку.
Должно работать так:

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


взлетело, спасибо
46. bonv 1191 18.02.19 19:56 Сейчас в теме
UPDATE: Доступна версия для 1Script
opm install 1connector
iulyus; maksa2005; user859339; i_a; untru; Krio2; mickey.1cx; Perfolenta; karachev_og; kote; mvxyz; Evg-Lylyk; nixel; Danil.Potapov; ardarik; ardn; Aleskey_K; ktb; EGOLEGE; Merc; GreenDragon; +21 Ответить
50. GreenDragon 19.02.19 16:31 Сейчас в теме
(46) Даже библиотеку запилил? Просто огонь! Моё увОжение...
52. leemuar 19.02.19 18:17 Сейчас в теме
Форк для режима совместимости 8.3.5: https://github.com/leemuar/Connector
53. Forest83 52 28.03.19 11:09 Сейчас в теме
Добрый день!

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

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

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

Хотелось бы описание ошибок и примеры по основным методам с данными с которыми будет формироваться запрос.
54. bonv 1191 28.03.19 11:30 Сейчас в теме
(53)
1. Какой логин и пароль для обработки тестирования?

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

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

А пример можно? В параметр Json передается текст?
55. Forest83 52 28.03.19 15:40 Сейчас в теме
Передаю структуру.
Прикрепленные файлы:
56. bonv 1191 28.03.19 17:42 Сейчас в теме
(55) Можно увидеть полный код вызова?
57. bonv 1191 28.03.19 23:37 Сейчас в теме
(55) В ответе пришел не JSON

Безопасный вариант
Ответ = КоннекторHTTP.Post(....);
Если Ответ.КодСостояния = 200 Тогда // Зависит от сервиса, где-то и на ошибки возвращать будут JSON
    Результат = КоннекторHTTP.КакJson(Ответ);
Иначе
    ВызватьИсключение(КоннекторHTTP.КакТекст(Ответ));
КонецЕсли;
58. Forest83 52 29.03.19 10:29 Сейчас в теме
Да возвращается не JSON, не понял из описания метода. POST отрабатывает корректно.

И еще интересно, что при POST-запросе с JSON, если приходит редирект 301, то автоматически меняет метод на GET. И после этого ожидаемо падает с 405 кодом...
59. bonv 1191 29.03.19 11:10 Сейчас в теме
(58)
И еще интересно, что при POST-запросе с JSON, если приходит редирект 301, то автоматически меняет метод на GET. И после этого ожидаемо падает с 405 кодом...

RFC 2068 запрещает автоматический редирект для POST если получен код 301.
https://rfc2.ru/2068.rfc/53#p10.3.2

В GET преобразуют большинство браузеров. Думаю стоит привести поведение к RFC - возвращать просто 301 в этом случае
60. Forest83 52 29.03.19 12:08 Сейчас в теме
Согласен.

Либо как рекомендуют по ссылке выше: Если код состояния 301 был получен в ответ на запрос, отличный от GET или HEAD, агент пользователя НЕ ДОЛЖЕН автоматически переназначать запрос, пока нет подтверждения пользователя, так как иначе условия запроса изменятся.
63. user774630 07.05.19 18:05 Сейчас в теме
Добрый день. NTLM аутентификация не поддерживается?
64. bonv 1191 08.05.19 07:01 Сейчас в теме
(63) сейчас не поддерживается
65. bonv 1191 13.05.19 09:18 Сейчас в теме
(63) Теперь поддерживается
pbahushevich; creatermc; user774630; +3 Ответить
200. kovyazin_open 08.07.21 10:06 Сейчас в теме
(65) Нашел :) спасибо
// Создает объект для хранения параметров сессии.
//
// Возвращаемое значение:
// Структура - параметры сессии:
// *Заголовки - Соответствие - HTTP заголовки запроса.
// *Аутентификация - Структура - параметры аутентификации запроса.
// *ИспользоватьАутентификациюОС - Булево - включает использование аутентификации NTLM или Negotiate.
// Значение по умолчанию: Ложь.
// *Тип - Строка - тип аутентификации. Для Basic Тип можно не указывать.
Функция СоздатьСессию() Экспорт
66. TelsDevelopUser 13.05.19 11:21 Сейчас в теме
Не совсем понятно, каким образом можно передать
1) в теле запроса сразу массив
2) имена свойств с "-"

Например:
[
	{
		"ship-id": "1", ...}
	{
		"ship-id": "1", ...}
]


Подскажите, пожалуйста, какого вида должны быть данные, передаваемые в доп. параметры структурой с именем "Данные"?
67. JohnyDeath 300 13.05.19 12:57 Сейчас в теме
(66) вангую, что надо вместо структуры использовать Соответствие
68. bonv 1191 13.05.19 13:03 Сейчас в теме
(66)
Можно так
Json = Новый Массив;
ВложенныйОбъект = Новый Соответствие;
ВложенныйОбъект.Вставить("ship-id", "1");
Json.Добавить(ВложенныйОбъект);
			
Результат = КоннекторHTTP.PostJson("https://httpbin.org/post", Json);
TelsDevelopUser; +1 Ответить
75. TelsDevelopUser 21.05.19 11:00 Сейчас в теме
(68) Спасибо! И еще вопрос - можно ли как-нибудь и как получить статус HTTP-запроса (200, например) и другие корневые свойства в результате?
76. bonv 1191 21.05.19 11:05 Сейчас в теме
(75) Все методы без суффикса Json возвращают структуру со свойствами ответа
Т.е. вместо
Результат = КоннекторHTTP.PostJson("https://httpbin.org/post", Json);

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


Вообще, в статье все это есть)
TelsDevelopUser; +1 Ответить
69. genayo 14.05.19 16:02 Сейчас в теме
Поддержка OAuth - авторизации не планируется?
70. bonv 1191 14.05.19 19:28 Сейчас в теме
(69) Ну с OAuth не все так просто.
Для каких сервисов нужно?
71. genayo 14.05.19 20:07 Сейчас в теме
(70) Да возникла задача интеграции с API с авторизацией через Bearer Token в http header.
72. bonv 1191 15.05.19 14:56 Сейчас в теме
(71) Если токен есть, то достаточно заполнить заголовок
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer МойСуперСекретныйТокен");
Результат = КоннекторHTTP.GetJson("http://httpbin.org/headers",, Новый Структура("Заголовки", Заголовки));
73. lefthander 15.05.19 16:12 Сейчас в теме
В разделе содержимое это правильно?

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

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

Результат = КоннекторHTTP.КакJson(КоннекторHTTP.Post(("http://httpbin.org/get")));
//Конец цитаты
74. bonv 1191 15.05.19 16:18 Сейчас в теме
77. SlaSla 26 16.06.19 08:31 Сейчас в теме
Каким образом отправить чисто json строку через КоннекторHTTP.Post без предварительного преобразования в Соответствие?
78. SlaSla 26 16.06.19 12:51 Сейчас в теме
Какова должна быть структура-соответствие-масссив отправляемого через КоннекторHTTP.Post

{"F":[

{"S":{"code":1,"price":5,"name":"Конфета"}},
{"S":{"code":2,"price":15,"name":"Печенье", "qty":0.5}},
{"D":{ "prc":5, "all":1}},

]}
79. bonv 1191 16.06.19 13:52 Сейчас в теме
(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);
Показать


Как-то так
user774630; +1 Ответить
80. SlaSla 26 16.06.19 14:14 Сейчас в теме
(79)Спасибо! Всё получилось!
81. Goleff74 193 01.07.19 19:48 Сейчас в теме
Добрый день.
Нет ли в планах или загашниках добавить в библиотеку методов работы с нестандартными для 1С Soap сервисами, схемы которых 1С прочитать не в состоянии и приходится все это отсылать POST'ом, формируя тело самостоятельно?
82. bonv 1191 02.07.19 22:38 Сейчас в теме
(81) Планы есть, но пока нет времени
83. user1166203 04.07.19 14:15 Сейчас в теме
А как в POST запрос передать тело в свободном виде? Не JSON.
84. bonv 1191 04.07.19 15:52 Сейчас в теме
(83) какой формат этого тела? Что за данные?
85. user1166203 04.07.19 17:38 Сейчас в теме
86. bonv 1191 05.07.19 02:11 Сейчас в теме
(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, 
	Новый Структура("Заголовки", Заголовки));
Показать
95. chipazawra 29.08.19 17:48 Сейчас в теме
(86) Приветствую!
Хотел бы уточнить.
1) Собираешься ли ты реализовать поддержку параметровURL ? пример "/storage/{Storage}/{ID}"
2) Поддержку соединения, не каждый раз его инициализировать а что-то подобное .СоздатьСессию().
96. bonv 1191 30.08.19 16:39 Сейчас в теме
(95)

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

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


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

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


Теперь в рамках сессии HTTPСоединение переиспользуется
JohnyDeath; +1 Ответить
Оставьте свое сообщение

См. также

Видеозаписи онлайн-митапа "Интеграционные решения в 1С" Промо

Интеграция с сервисами Платные (руб)

24 июля прошел онлайн-митап по интеграционным решениям в 1С. Говорили о Rabbit MQ, Apache Kafka и многом другом.

3000 руб.

20.08.2020    7813    12    0    

Подписки на события (Infostart Toolkit)

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Россия Бесплатно (free)

Все подписки на события с отбором по метаданным, поиском подписки по подстроке, отображением объектов подписки и обработчиков (с возможностью посмотреть код).

вчера в 12:30    515    Evg-Lylyk    1    

Решение некоторых задач с помощью "Отладчика запросов"

Прочие инструменты разработчика v8 Платформа 1C v8.2 Платформа 1С v8.1 v8::УФ Россия Бесплатно (free)

Своей разработкой "Отладчик запросов" я пользуюсь сам в повседневной работе. В основном, для составления запросов отчетов, редактирования запросов КД и подобных задач. Однако, иногда нужно по-быстрому решить задачу обработки данных, которую я предпочитаю решать с помощью отладчика запросов. Пару таких задач и их решение - приведу в этой статье.

29.11.2021    978    DrAku1a    5    

Разработка гибридного web-приложения на 1С, возможности и ограничения

WEB v8 Бесплатно (free)

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

06.09.2021    3050    Бэнни    11    

re: Flowcon

О жизни Прочие инструменты разработчика v8 1cv8.cf Бесплатно (free)

Flowcon возвращается.

28.04.2021    2414    1c-intelligence    26    

Работа с СКД в продукте "Infostart Toolkit"

Прочие инструменты разработчика v8 v8::СКД Бесплатно (free)

Infostart Toolkit обладает большим количеством уникальных возможностей для работы с СКД – это анализ исполняемых текстов запросов, работа с внешними источниками в схеме СКД, получение данных в отладке и многое другое. Обо всех этих возможностях рассказал разработчик продукта Евгений Люлюк.

24.12.2020    3259    Evg-Lylyk    2    

Загрузка номенклатуры и изображений в Управление торговлей 11.4 и УНФ из файлов прайс-листов формата YML (Yandex Market Format) или XML

Обработка справочников Обмен через XML v8 УТ11 Россия Абонемент ($m)

Обработка предназначена для загрузки каталога номенклатуры и изображений из файлов прайс-листов формата YML (Yandex Market Format) или XML или по ссылке из Интернет в справочник "Номенклатура".

3 стартмани

20.11.2020    3649    18    Victor29reg    13    

Загрузка изображений (картинок) по ссылке из файла форматов YML (Yandex Market Format) или XML (управляемые формы)

Обработка справочников Обмен через XML v8 v8::УФ УНФ УТ11 Россия Абонемент ($m)

Обработка позволяет загрузить изображения из Интернет по ссылке, указанной в файле формата YML (Yandex Market Format) или XML в справочник Номенклатуры в стандартное хранилище изображений.

1 стартмани

06.11.2020    4128    12    Victor29reg    2    

Загрузка изображений (картинок) по ссылке из Excel (управляемые формы)

Обработка справочников Загрузка и выгрузка в Excel v8 v8::УФ УНФ УТ11 Россия Абонемент ($m)

Обработка позволяет загрузить изображения из Интернет по ссылке, указанной в файле Excel в справочник Номенклатуры в стандартное хранилище изображений.

1 стартмани

03.11.2020    4653    36    Victor29reg    2    

Загрузка данных с брокерского счета Тиньков с использованием OpenAPI

Учет доходов и расходов Финансовые v8 1cv8.cf Россия УУ Абонемент ($m)

Шаблон использования OpenAPI — HTTP-интерфейса для взаимодействия с торговой платформой Тинькофф Инвестиции. Разработка не является законченным решением и предназначена для встраивания в свою собственную конфигурацию. Позволяет скачать с рабочего брокерского счета следующие данные: Данные о биржевых активах (Акции, облигации и ETF), используемых в Тинькофф Инвестиции Данные о брокерских счетах, Данные об операциях, совершенных брокером, Данные о портфеле на брокерском счете, Данные о валютных активах на брокерском счете.

10 стартмани

16.09.2020    8538    17    Hitcher    6    

Формирование HTTP запроса формата multipart/form-data с двоичными данными, используя ПотокВПамяти

WEB v8 1cv8.cf Бесплатно (free)

В статье опишу вариант формирования запроса

11.09.2020    6538    malikov_pro    15    

Аутентификация в сервисах google с использованием ключа сервисного пользователя

WEB v8 1cv8.cf Россия Абонемент ($m)

В статье опишу вариант аутентификации в сервисах google используя ключ сервисного пользователя и криптографию windows.

1 стартмани

17.08.2020    2660    4    malikov_pro    1    

Мониторинг факта выполнения обмена с помощью сервиса healthchecks.io

Интеграция с сервисами Системное администрирование v8 1cv8.cf Россия Бесплатно (free)

В статье опишу вариант простого мониторинга обработчиков, запускаемых по расписанию.

30.06.2020    2756    malikov_pro    7    

5 ситуаций, когда в экосистеме 1C нужны веб-сервисы

Интеграция и обмен данными v8 Бесплатно (free)

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

24.03.2020    9110    Neti    4    

Amazon S3. Вычисляем сигнатуры подписи. Объектное хранилище

WEB v8 Россия Абонемент ($m)

Платформа 1С поддерживает протокол Amazon S3 только через REST API. Протокол подробно описан на сайте Amazon. Алгоритм вычисления сигнатуры подписи запроса сложен, отладка на рабочем сервисе не показательна, ошибки не очевидны. Amazon в документации приводит примеры вычисления сигнатуры с фиксацией промежуточных результатов. Примеры вычисления сигнатуры подходят для встроенной проверки реализованного в 1С алгоритма, в том числе написания тестов. В статье описан принцип проверки вычисления сигнатуры, в вложении код вычисления сигнатуры и пара тестовых примеров.

1 стартмани

04.02.2020    5230    26    newtraveller    11    

Почта России - отправка и отслеживание, интеграция с Документооборот 8; УНФ

Внешние источники данных Документооборот и делопроизводство Документооборот и делопроизводство v8 ДО Россия УУ Абонемент ($m)

Выгрузка почтовых отравлений в личный кабинет отправки Почты России; отслеживание почтовых отправлений через Почту России; расширение для интеграции Документооборот 8, УНФ с Почтой России

5 стартмани

04.06.2019    19400    134    wtlz    77