Консоль HTTP-запросов с генерацией кода
Комментарии
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
По картинке к статье подумал, что это конвертер строки curl в код 1С. Вот куча кнопочек, полей и прочего не так интересна, как такой конвертер, т.к. почти все примеры в интернетах написаны с использованием curl, например https://rocket.chat/docs/developer-guides/rest-api/chat/postmessage/#example-call
Может кто-нить сделает? Звездочек огребет наверняка
Может кто-нить сделает? Звездочек огребет наверняка
(3)О, на это есть несколько причин - не везде разрешают стороннее по, поведение 1С все таки иное (все тот-же прокси, конвертация кириллицы в строке запроса), запуск на серве 1С, который является другой тачкой и другим юзером AD.
Чем приближенней к реальным условиям эксплуатации, тем лучше. Да и после getpostman, cUrl, SoapUI придется все перетаскивать в код, а тут сгенерил код и огонь.
Чем приближенней к реальным условиям эксплуатации, тем лучше. Да и после getpostman, cUrl, SoapUI придется все перетаскивать в код, а тут сгенерил код и огонь.
Чета в этом есть, ибо можно прикрутить сюда тестирование нагрузки и все такое прочее, что есть в сторонних решениях. В итоге описал сервис, нажал "завалить в 1000 потоков", в итоге чето там протестировал (или повесил сервак) - все опыт. Сразу ясно, тянет 1С это или тут лучше астральный программист на питоне за 10 килорублей...
Делал нечто подобное "для себя" но у автора пофункциональней. Я правда для вывода использовал "ФорматированныйДокумент" чтобы значения и атрибуты раскрашивать по-всякому, так глазастей. Так сказать, хотелось бы увидеть и у вас) Чтобы инструмент превратился в ультимативный
Прикрепленные файлы:
Не хватало работы с 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);
Возврат результат;
КонецФункции
&НаСервереБезКонтекста
Функция ХексВСтроку(Текст)
Возврат НРег(СтрЗаменить(Строка(Текст), " ", ""));
КонецФункции
Показать
(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);
КонецЕсли;
КонецЦикла;
Возврат результат;
КонецФункции
&НаСервереБезКонтекста
Функция ХексВСтроку(Текст)
Возврат НРег(СтрЗаменить(Строка(Текст), " ", ""));
КонецФункции
Показать
Попробовал вашу обработку, спасибо!
Есть небольшое неудобство: обработка не выводит заголовки и тело ответа если код ответа не равен 200. Мне кажется было бы удобнее видеть заголовки и тело ответа всегда, при любом коде ответа.
Есть небольшое неудобство: обработка не выводит заголовки и тело ответа если код ответа не равен 200. Мне кажется было бы удобнее видеть заголовки и тело ответа всегда, при любом коде ответа.
Про попытке добавления сервиса:
{ВнешняяОбработка.ОтправитьHTTPЗапрос.Форма.Форма.Форма(558)}: Индекс находится за границами массива
Рез.Сервер = Лев(МассивДанныхСсылки[1], Найти(МассивДанныхСсылки[1], "/")-1);
при попытке заполнить по cURL
{ВнешняяОбработка.ОтправитьHTTPЗапрос.Форма.Форма.Форма(957)}: Индекс находится за границами массива
ВремТекстТела = МассивСтрокТела[1];
{ВнешняяОбработка.ОтправитьHTTPЗапрос.Форма.Форма.Форма(558)}: Индекс находится за границами массива
Рез.Сервер = Лев(МассивДанныхСсылки[1], Найти(МассивДанныхСсылки[1], "/")-1);
при попытке заполнить по cURL
{ВнешняяОбработка.ОтправитьHTTPЗапрос.Форма.Форма.Форма(957)}: Индекс находится за границами массива
ВремТекстТела = МассивСтрокТела[1];
Добрый день!
Для обычных форм есть замечательный набор инструментов "Инструменты разработчика 1С", но его невозможно использовать в линуксе и в тонком и веб клиенте.
Поэтому мы решили собрать подобный пакет, но который будет работать только на платформенных механизмах или с использованием кроссплатформенных компонент.
Использование этого пакета инструментов хотим сделать общедоступным(OpenSource), разработку вести через гитхаб с использованием EDT.
Можем ли мы включить в этот набор обработки(или часть идей и функционала) из этой публикации?
На текущий момент нашли основные инструменты (консоль запросов, консоль кода, редактор реквизитов, консоль компоновки и др.) для включения в инструментарий. Сейчас занимаемся получением одобрения авторов. Часть включаем свои- редактор предопределенных, редактор констант, Групповая обработка
Ссылка на репозиторий с новыми инструментамиhttps://github.com/cpr1c/tools_ui
Для обычных форм есть замечательный набор инструментов "Инструменты разработчика 1С", но его невозможно использовать в линуксе и в тонком и веб клиенте.
Поэтому мы решили собрать подобный пакет, но который будет работать только на платформенных механизмах или с использованием кроссплатформенных компонент.
Использование этого пакета инструментов хотим сделать общедоступным(OpenSource), разработку вести через гитхаб с использованием EDT.
Можем ли мы включить в этот набор обработки(или часть идей и функционала) из этой публикации?
На текущий момент нашли основные инструменты (консоль запросов, консоль кода, редактор реквизитов, консоль компоновки и др.) для включения в инструментарий. Сейчас занимаемся получением одобрения авторов. Часть включаем свои- редактор предопределенных, редактор констант, Групповая обработка
Ссылка на репозиторий с новыми инструментами
Добрый день! Подскажите, где найти примеры CRUD скриптов для Акта в формате curl?
К сожалению, мои познания в 1С == 0. Нужно интегрироваться с 1С из стороннего приложения через REST. Конфигурация 1С настроена. Сервис откликается.
К сожалению, мои познания в 1С == 0. Нужно интегрироваться с 1С из стороннего приложения через REST. Конфигурация 1С настроена. Сервис откликается.