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













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

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.

15 Comments

  1. Stepa86

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

    Может кто-нить сделает? Звездочек огребет наверняка

    Reply ↓
  2. leongl

    (1) Согласен, сам подумываю написать импорт/экспорт Curl и SoapUI

    Reply ↓
  3. ilyav

    А зачем это в 1с? пользуюсь программой Postman https://www.getpostman.com/ на 100% устраивает

    Reply ↓
  4. leongl

    (3)О, на это есть несколько причин — не везде разрешают стороннее по, поведение 1С все таки иное (все тот-же прокси, конвертация кириллицы в строке запроса), запуск на серве 1С, который является другой тачкой и другим юзером AD.

    Чем приближенней к реальным условиям эксплуатации, тем лучше. Да и после getpostman, cUrl, SoapUI придется все перетаскивать в код, а тут сгенерил код и огонь.

    Reply ↓
  5. starik-2005

    Чета в этом есть, ибо можно прикрутить сюда тестирование нагрузки и все такое прочее, что есть в сторонних решениях. В итоге описал сервис, нажал «завалить в 1000 потоков», в итоге чето там протестировал (или повесил сервак) — все опыт. Сразу ясно, тянет 1С это или тут лучше астральный программист на питоне за 10 килорублей…

    Reply ↓
  6. Vanch90

    (3) Как зачем удобство)

    Еще бы на обычных формах похожее)

    Reply ↓
  7. kembrik

    Делал нечто подобное «для себя» но у автора пофункциональней. Я правда для вывода использовал «ФорматированныйДокумент» чтобы значения и атрибуты раскрашивать по-всякому, так глазастей. Так сказать, хотелось бы увидеть и у вас) Чтобы инструмент превратился в ультимативный

    Reply ↓
  8. 🅵🅾️🆇

    Однозначно [★] в карму :3

    Reply ↓
  9. s22

    Было бы хорошо генерировать защищеный post (исключение двойной отсылки)

    А так же более менее стандартный обмен по рестапи

    Reply ↓
  10. shura_k

    Не хватало работы с 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);
    Возврат результат;
    КонецФункции
    
    &НаСервереБезКонтекста
    Функция ХексВСтроку(Текст)
    Возврат НРег(СтрЗаменить(Строка(Текст), » «, «»));
    КонецФункции
    
    

    Показать

    Reply ↓
  11. swimdog
    Reply ↓
  12. leemuar

    Попробовал вашу обработку, спасибо!

    Есть небольшое неудобство: обработка не выводит заголовки и тело ответа если код ответа не равен 200. Мне кажется было бы удобнее видеть заголовки и тело ответа всегда, при любом коде ответа.

    Reply ↓
  13. dndw

    Про попытке добавления сервиса:

    {ВнешняяОбработка.ОтправитьHTTPЗапрос.Форма.Форма.Форма(558)}: Индекс находится за границами массива

    Рез.Сервер = Лев(МассивДанныхСсылки[1], Найти(МассивДанныхСсылки[1], «/»)-1);

    при попытке заполнить по cURL

    {ВнешняяОбработка.ОтправитьHTTPЗапрос.Форма.Форма.Форма(957)}: Индекс находится за границами массива

    ВремТекстТела = МассивСтрокТела[1];

    Reply ↓
  14. Vida

    Подскажите пожалуйста на совместимости = 8.3.5 пойдет?

    Reply ↓
  15. DVBLEX

    Кто может закинуть ето решения беслатно в пм ?

    Reply ↓

Leave a Comment

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