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

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

Перейти к публикации

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

Может кто-нить сделает? Звездочек огребет наверняка
2. leongl 348 25.05.18 11:51 Сейчас в теме
(1) Согласен, сам подумываю написать импорт/экспорт Curl и SoapUI
3. ilyav 25.05.18 15:24 Сейчас в теме
А зачем это в 1с? пользуюсь программой Postman https://www.getpostman.com/ на 100% устраивает
adhocprog; Mortum; nbeliaev; bpc222; +4 Ответить
4. leongl 348 25.05.18 15:59 Сейчас в теме
(3)О, на это есть несколько причин - не везде разрешают стороннее по, поведение 1С все таки иное (все тот-же прокси, конвертация кириллицы в строке запроса), запуск на серве 1С, который является другой тачкой и другим юзером AD.
Чем приближенней к реальным условиям эксплуатации, тем лучше. Да и после getpostman, cUrl, SoapUI придется все перетаскивать в код, а тут сгенерил код и огонь.
KolBbl4; frkbvfnjh; adhocprog; 🅵🅾️🆇; jaroslav.h; vaskomain; JohnyDeath; blackhole321; CyberCerber; van_za; +10 Ответить
7. Vanch90 28.05.18 07:34 Сейчас в теме
(3) Как зачем удобство)
Еще бы на обычных формах похожее)
jaroslav.h; +1 Ответить
5. starik-2005 2202 26.05.18 11:07 Сейчас в теме
Чета в этом есть, ибо можно прикрутить сюда тестирование нагрузки и все такое прочее, что есть в сторонних решениях. В итоге описал сервис, нажал "завалить в 1000 потоков", в итоге чето там протестировал (или повесил сервак) - все опыт. Сразу ясно, тянет 1С это или тут лучше астральный программист на питоне за 10 килорублей...
8. kembrik 3 28.05.18 19:00 Сейчас в теме
Делал нечто подобное "для себя" но у автора пофункциональней. Я правда для вывода использовал "ФорматированныйДокумент" чтобы значения и атрибуты раскрашивать по-всякому, так глазастей. Так сказать, хотелось бы увидеть и у вас) Чтобы инструмент превратился в ультимативный
Прикрепленные файлы:
10. 🅵🅾️🆇 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);
	Возврат результат;
КонецФункции

&НаСервереБезКонтекста
Функция ХексВСтроку(Текст)
	 Возврат НРег(СтрЗаменить(Строка(Текст), " ", ""));
КонецФункции
 
Показать
Vida; swimdog; eeeio; +3 Ответить
13. swimdog 725 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);
		КонецЕсли;
	КонецЦикла;
	
	Возврат результат;
КонецФункции

&НаСервереБезКонтекста
Функция ХексВСтроку(Текст)
	
	Возврат НРег(СтрЗаменить(Строка(Текст), " ", ""));
	
КонецФункции
Показать
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 13 13.05.19 18:06 Сейчас в теме
Подскажите пожалуйста на совместимости = 8.3.5 пойдет?
17. DVBLEX 13.08.19 10:35 Сейчас в теме
Кто может закинуть ето решения беслатно в пм ?
18. cprit 383 26.12.19 13:52 Сейчас в теме
Добрый день!
Для обычных форм есть замечательный набор инструментов "Инструменты разработчика 1С", но его невозможно использовать в линуксе и в тонком и веб клиенте.

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

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

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

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

Ссылка на репозиторий с новыми инструментами https://github.com/cpr1c/tools_ui
Оставьте свое сообщение
Вопросы с вознаграждением