Консоль HTTP-запросов с генерацией кода

17.09.18

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

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

Скачать файлы

Наименование Файл Версия Размер
Консоль HTTP-запросов с генерацией кода:
.epf 21,00Kb
483
.epf 1.1.3 21,00Kb 483 Скачать

UPD: Добавил авторизацию OAuth2, включил блок OAuth2 авторизации в генерируемый код.

При разработке очень часто сталкиваюсь с необходимостью взаимодействия со всякого рода сервисами (rest, soap), и возникает потребность начально отладить работу сервиса, так сказать «пощупать». Для этого использую приложение SoapUI, многие используют curl, и после отладки необходимо переносить все настройки в 1С, на ее классы и методы, что занимает некоторое время. Именно так и родилась консоль http-запросов для 1С. Сразу отмечу, что она покрывает только rest сервисы, для soap она не подойдет.

Консоль может не только выполнять запросы и получать результат их выполнения, но и генерировать необходимый код на языке 1С. 

Пробежимся по интерфейсу:

Настройки соединения, стоить отметить, что в поле сервер вносим только весь текст сервиса слева до домена верхнего уровня уровня (ru, com, org и т.п.)

Настройки соединения

Ссылка "Настройка прокси" открывает группу с настройками прокси (сервер прокси, логин, пароль), бывает нужно редко, обычно просто ставлю галку "Использовать прокси" и 1С сама подтягивает прокси по умолчанию.

Путь к самому rest-сервису, это все, что написано после домена верхнего уровня

Само тело запроса, может быть пустым, может содержать JSON запрос (как в примера), а может содержать XML или вообще base64 картинки/файла

Результат ответа - это тело ответа и код ответа с подробным описанием

Команды получения готово кода для конфигуратора

Пример получаемого кода

Если часть процедур/функций по работе с http вшиты в конфу, то генерится не универсальный код, а код с использованием процедур/функций конфы

Настройка заголовков запроса, это может контент тайп или ключ апи, как в примере

Параметры закидываются в/из строки сервиса

 

Данные формы - хитрая штука, с которыми 1С не позволяет работать как с объектом, при внесении этих параметров генерится особое тело запроса с разделителями и т.д. 

Использовал их всего один раз, перекрестился и забыл.

Визуализатор/конструктор JSON-объектов

Использую на 8.3.11.2899.

Консоль http-запрос rest post get

См. также

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

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

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

13000 руб.

02.09.2020    119910    656    389    

701

Infostart PrintWizard

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

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

18000 руб.

06.10.2023    7007    20    6    

37

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

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

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

10000 руб.

10.11.2023    3244    10    1    

31

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177341    1070    0    

846

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

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

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

5000 руб.

07.02.2018    99203    239    97    

296

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

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

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

3000 руб.

27.08.2019    17910    6    8    

38

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

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

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

2040 руб.

27.12.2017    27945    3    10    

14

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

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

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

2400 руб.

24.09.2019    23488    15    15    

31
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Stepa86 1520 25.05.18 11:43 Сейчас в теме
По картинке к статье подумал, что это конвертер строки curl в код 1С. Вот куча кнопочек, полей и прочего не так интересна, как такой конвертер, т.к. почти все примеры в интернетах написаны с использованием curl, например https://rocket.chat/docs/developer-guides/rest-api/chat/postmessage/#example-call

Может кто-нить сделает? Звездочек огребет наверняка
2. leongl 523 25.05.18 11:51 Сейчас в теме
(1) Согласен, сам подумываю написать импорт/экспорт Curl и SoapUI
6. пользователь 27.05.18 06:40
Сообщение было скрыто модератором.
...
9. пользователь 30.05.18 15:58
Сообщение было скрыто модератором.
...
3. ilyav 25.05.18 15:24 Сейчас в теме
А зачем это в 1с? пользуюсь программой Postman https://www.getpostman.com/ на 100% устраивает
user786530; adhocprog; Mortum; nbeliaev; bpc222; +5 Ответить
4. leongl 523 25.05.18 15:59 Сейчас в теме
(3)О, на это есть несколько причин - не везде разрешают стороннее по, поведение 1С все таки иное (все тот-же прокси, конвертация кириллицы в строке запроса), запуск на серве 1С, который является другой тачкой и другим юзером AD.
Чем приближенней к реальным условиям эксплуатации, тем лучше. Да и после getpostman, cUrl, SoapUI придется все перетаскивать в код, а тут сгенерил код и огонь.
AdmKmpt; tormozit; KolBbl4; frkbvfnjh; adhocprog; 🅵🅾️🆇; jaroslav.h; vaskomain; JohnyDeath; blackhole321; CyberCerber; van_za; +12 Ответить
7. Vanch90 28.05.18 07:34 Сейчас в теме
(3) Как зачем удобство)
Еще бы на обычных формах похожее)
jaroslav.h; +1 Ответить
22. tormozit 7133 22.09.21 17:05 Сейчас в теме
(7) В ИР говорят есть аналогичная на обычных формах.
5. starik-2005 3031 26.05.18 11:07 Сейчас в теме
Чета в этом есть, ибо можно прикрутить сюда тестирование нагрузки и все такое прочее, что есть в сторонних решениях. В итоге описал сервис, нажал "завалить в 1000 потоков", в итоге чето там протестировал (или повесил сервак) - все опыт. Сразу ясно, тянет 1С это или тут лучше астральный программист на питоне за 10 килорублей...
8. kembrik 10 28.05.18 19:00 Сейчас в теме
Делал нечто подобное "для себя" но у автора пофункциональней. Я правда для вывода использовал "ФорматированныйДокумент" чтобы значения и атрибуты раскрашивать по-всякому, так глазастей. Так сказать, хотелось бы увидеть и у вас) Чтобы инструмент превратился в ультимативный
Прикрепленные файлы:
10. 🅵🅾️🆇 522 30.05.18 17:13 Сейчас в теме
Однозначно [★] в карму :3
11. s22 19 06.07.18 17:45 Сейчас в теме
Было бы хорошо генерировать защищеный post (исключение двойной отсылки)
А так же более менее стандартный обмен по рестапи
12. shura_k 10.07.18 18:34 Сейчас в теме
Не хватало работы с Digest авторизацией. Доделал.
На форму надо добавить два реквизита, а так все в коде.
Вставлять контекстно.

	Если Digest и Результат.КодСостояния=401 Тогда
		WWW_Authenticate=Результат.Заголовки.Получить("WWW-Authenticate");
		Ответ=СтрРазделить(WWW_Authenticate,",");
		Если Ответ.Количество()>0 Тогда
			realm=ОтветЗначение("realm",Ответ[0]);
			HA1 = ПолучитьХеш(Логин+":"+realm+":"+Пароль);	
			HA1=ХексВСтроку(HA1);
			URI=?(Лев(Сервис,1)<>"/","/"+Сервис,Сервис);
			HA2 = ПолучитьХеш(ВРег(ИмяМетода)+":"+URI);
			HA2=ХексВСтроку(HA2);
			qop=ОтветЗначение("qop",Ответ[1]);
			nonce=ОтветЗначение("nonce",Ответ[2]);
			opaque=ОтветЗначение("opaque",Ответ[3]);
			nc=nc+1;
			ncStr=формат(nc,"ЧЦ=8; ЧДЦ=; ЧВН=; ЧГ=0");
			cnonce=Новый УникальныйИдентификатор;
			cnonce=НРег(СтрЗаменить(Строка(cnonce), "-", ""));
			Если НРег(Лев(qop,4))="auth" Тогда
				Response  = ПолучитьХеш(HA1+":"+nonce+":"+ncStr+":"+cnonce+":"+qop+":"+HA2);	
			Иначе
				Response  = ПолучитьХеш(HA1+":"+nonce+":"+HA2);
			КонецЕсли;
			Response=ХексВСтроку(Response);
			
			DigestЗапрос="Digest username="""+Логин+""", realm="""+realm+""", nonce="""+nonce;
			DigestЗапрос=DigestЗапрос+""", uri="""+URI+""", qop="""+qop+""", nc="""+ncStr;
			DigestЗапрос=DigestЗапрос+""", cnonce="""+cnonce+""", response="""+Response+""", opaque="""+opaque+"""";
			
			УдалитьАвторизацию();
			
			Стр=Заголовки.Добавить();
			Стр.ИмяЗаголовка="Authorization";
			Стр.ЗначениеЗаголовка=DigestЗапрос;
			
			ВыполнитьЗапросПоМетоду(ВРег(ИмяМетода));
			Возврат;
		КонецЕсли; 
		
	КонецЕсли; 



&НаСервере
Процедура УдалитьАвторизацию()
	
	
    Отбор = Новый Структура;
    Отбор.Вставить("ИмяЗаголовка", "Authorization");
    Строки = Заголовки.НайтиСтроки(Отбор);
	Если Строки.Количество()>0 Тогда
		Заголовки.Удалить(Строки[0]);	
	КонецЕсли; 
		
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьХеш(Текст)
	ОбъектХеш = Новый ХешированиеДанных(ХешФункция.MD5);
    ОбъектХеш.Добавить(Текст);
    Возврат ОбъектХеш.ХешСумма;
КонецФункции

&НаСервереБезКонтекста
Функция ОтветЗначение(Ответ,Значение)
	результат=Сред(Значение,Найти(Значение,Ответ+"=")+СтрДлина(Ответ)+2);
	результат=Лев(результат,СтрДлина(результат)-1);
	Возврат результат;
КонецФункции

&НаСервереБезКонтекста
Функция ХексВСтроку(Текст)
	 Возврат НРег(СтрЗаменить(Строка(Текст), " ", ""));
КонецФункции
 
Показать
qSergey; Vida; swimdog; eeeio; +4 Ответить
13. swimdog 762 11.01.19 14:29 Сейчас в теме
(12) Переделал под универсальное получение Digest, если предыдущее значение вернуло ошибку аутентификации

	// Выполнить GET запрос:
	Попытка
		Результат = Соединение.Получить(HTTPЗапрос, ФайлРезультат);
	Исключение
		ПоказатьПредупреждение(Новый ОписаниеОповещения(), "Не удалось получить фото, проверьте параметры запроса!" + Символы.ВК + Символы.ВК + ОписаниеОшибки(), , "Получение фото автомобиля");
	КонецПопытки;
	
	Если Результат.КодСостояния = 200 Тогда
		
		ФотоМашины = Новый Картинка(ФайлРезультат, Истина);
		АдресФото = ПоместитьВоВременноеХранилище(ФотоМашины);
		
	ИначеЕсли Результат.КодСостояния = 401 Тогда
		
		WWW_Authenticate=Результат.Заголовки.Получить("WWW-Authenticate");
		ИмяМетода = "GET";
		Сервис = АдресРесурса;
		nc = 0;
		
		Ответ=СтрРазделить(СтрЗаменить(WWW_Authenticate, "Digest ", ""), ",");
		Если Ответ.Количество()>0 Тогда
			realm = ОтветЗначение("realm", Ответ);
			HA1 = ПолучитьХеш(Логин+":"+realm+":"+Пароль);    
			HA1 = ХексВСтроку(HA1);
			URI = ?(Лев(Сервис,1)<>"/","/"+Сервис, Сервис);
			HA2 = ПолучитьХеш(ВРег(ИмяМетода)+":"+URI);
			HA2 = ХексВСтроку(HA2);
			qop = ОтветЗначение("qop", Ответ);
			nonce = ОтветЗначение("nonce", Ответ);
			opaque = ОтветЗначение("opaque", Ответ);
			nc = nc+1;
			ncStr = Формат(nc,"ЧЦ=8; ЧДЦ=; ЧВН=; ЧГ=0");
			cnonce = Новый УникальныйИдентификатор;
			cnonce = НРег(СтрЗаменить(Строка(cnonce), "-", ""));
			Если НРег(Лев(qop,4))="auth" Тогда
				Response  = ПолучитьХеш(HA1+":"+nonce+":"+ncStr+":"+cnonce+":"+qop+":"+HA2);    
			Иначе
				Response  = ПолучитьХеш(HA1+":"+nonce+":"+HA2);
			КонецЕсли;
			Response = ХексВСтроку(Response);
			
			DigestЗапрос = "Digest username="""+Логин+""", realm="""+realm+""", nonce="""+nonce;
			DigestЗапрос = DigestЗапрос+""", uri="""+URI+""", qop="""+qop+""", nc="""+ncStr;
			DigestЗапрос = DigestЗапрос+""", cnonce="""+cnonce+""", response="""+Response+""", opaque="""+opaque+"""";
			
			HTTPЗапрос.Заголовки.Вставить("Authorization", DigestЗапрос);
			
			Попытка
				Результат = Соединение.Получить(HTTPЗапрос, ФайлРезультат);
			Исключение
				ПоказатьПредупреждение(Новый ОписаниеОповещения(), "Не удалось получить фото, проверьте параметры запроса!" + Символы.ВК + Символы.ВК + ОписаниеОшибки(), , "Получение фото автомобиля");
				Возврат;
			КонецПопытки;
			
			Если Результат.КодСостояния = 200 Тогда
				ФотоМашины = Новый Картинка(ФайлРезультат, Истина);
				АдресФото = ПоместитьВоВременноеХранилище(ФотоМашины);
			Иначе
				ПоказатьПредупреждение(Новый ОписаниеОповещения(), "Не удалось получить фото, проверьте параметры запроса!" + Символы.ВК + Символы.ВК + "Код результата = " + Результат.КодСостояния, , "Получение фото автомобиля");
			КонецЕсли;
			
		КонецЕсли; 
		
	КонецЕсли; 
	
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьХеш(Текст)
	ОбъектХеш = Новый ХешированиеДанных(ХешФункция.MD5);
	ОбъектХеш.Добавить(Текст);
	
	Возврат ОбъектХеш.ХешСумма;
КонецФункции

&НаСервереБезКонтекста
Функция ОтветЗначение(Значение, Ответ)
	результат = "";
	Для каждого СтрокаОтвета Из Ответ Цикл
		Если Найти(СтрокаОтвета, Значение) Тогда
			результат=Сред(СтрокаОтвета, Найти(СтрокаОтвета, "=")+2);
			результат=Лев(результат,СтрДлина(результат)-1);
		КонецЕсли;
	КонецЦикла;
	
	Возврат результат;
КонецФункции

&НаСервереБезКонтекста
Функция ХексВСтроку(Текст)
	
	Возврат НРег(СтрЗаменить(Строка(Текст), " ", ""));
	
КонецФункции
Показать
CepeLLlka; Vida; +2 Ответить
14. leemuar 18.01.19 11:45 Сейчас в теме
Попробовал вашу обработку, спасибо!

Есть небольшое неудобство: обработка не выводит заголовки и тело ответа если код ответа не равен 200. Мне кажется было бы удобнее видеть заголовки и тело ответа всегда, при любом коде ответа.
15. dndw 6 13.03.19 15:52 Сейчас в теме
Про попытке добавления сервиса:

{ВнешняяОбработка.ОтправитьHTTPЗапрос.Форма.Форма.Форма(558)}: Индекс находится за границами массива
Рез.Сервер = Лев(МассивДанныхСсылки[1], Найти(МассивДанныхСсылки[1], "/")-1);

при попытке заполнить по cURL
{ВнешняяОбработка.ОтправитьHTTPЗапрос.Форма.Форма.Форма(957)}: Индекс находится за границами массива
ВремТекстТела = МассивСтрокТела[1];
16. Vida 15 13.05.19 18:06 Сейчас в теме
Подскажите пожалуйста на совместимости = 8.3.5 пойдет?
17. DVBLEX 13.08.19 10:35 Сейчас в теме
Кто может закинуть ето решения беслатно в пм ?
18. cprit 872 26.12.19 13:52 Сейчас в теме
Добрый день!
Для обычных форм есть замечательный набор инструментов "Инструменты разработчика 1С", но его невозможно использовать в линуксе и в тонком и веб клиенте.

Поэтому мы решили собрать подобный пакет, но который будет работать только на платформенных механизмах или с использованием кроссплатформенных компонент.

Использование этого пакета инструментов хотим сделать общедоступным(OpenSource), разработку вести через гитхаб с использованием EDT.

Можем ли мы включить в этот набор обработки(или часть идей и функционала) из этой публикации?

На текущий момент нашли основные инструменты (консоль запросов, консоль кода, редактор реквизитов, консоль компоновки и др.) для включения в инструментарий. Сейчас занимаемся получением одобрения авторов. Часть включаем свои- редактор предопределенных, редактор констант, Групповая обработка

Ссылка на репозиторий с новыми инструментами https://github.com/cpr1c/tools_ui
19. antonzh 11.11.20 15:39 Сейчас в теме
Добрый день! Подскажите, где найти примеры CRUD скриптов для Акта в формате curl?
К сожалению, мои познания в 1С == 0. Нужно интегрироваться с 1С из стороннего приложения через REST. Конфигурация 1С настроена. Сервис откликается.
21. antonzh 11.11.20 16:03 Сейчас в теме
23. user594010_logobobah 08.06.23 18:32 Сейчас в теме
Для авторизации kerberos можно использовать данную обработку?
Оставьте свое сообщение