|
Есть ли в 1С готовая функция для разбора тела запроса в формате x-www-form-urlencoded? | ☑ | ||
---|---|---|---|---|
0
pavlushov
08.02.23
✎
14:55
|
Добрый день! HTTP-сервис получает запрос в формате x-www-form-urlencoded, нужно разобрать. В принципе ничего сложного нет, но интересно есть ли готовая функция для этого в 1С?
|
|||
1
Aleksey
08.02.23
✎
14:57
|
json?
|
|||
2
pavlushov
08.02.23
✎
15:05
|
(1) нет, там прилетает вот такая примитивная строка: client_id=User1&client_secret=bhif293fh982fh&grant_type=client_credentials&scope=read%20write
|
|||
3
pavlushov
08.02.23
✎
15:06
|
Я сделал простенькую функцию:
Функция xwwwformurlencodedВСтруктуру(ТелоЗапроса) Структура = Новый Структура; ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "&", Символы.ПС); Для Счетчик = 1 По СтрЧислоСтрок(ТелоЗапроса) Цикл ТекСтрока = СтрПолучитьСтроку(ТелоЗапроса, Счетчик); Поз = СтрНайти(ТекСтрока, "="); Ключ = Лев(ТекСтрока, Поз-1); Значение = Прав(ТекСтрока, СтрДлина(ТекСтрока) - Поз); Структура.Вставить(Ключ, Значение); КонецЦикла; Возврат Структура; КонецФункции |
|||
4
pavlushov
08.02.23
✎
15:06
|
но вдруг есть готовая?
|
|||
5
PR
08.02.23
✎
15:08
|
(3) Боже мой, какой ужас :))
СтрРазделить |
|||
6
Сергиус
08.02.23
✎
15:09
|
(4)РазложитьСтрокуВМассивПодстрок
|
|||
7
PR
08.02.23
✎
15:11
|
(6) И где там определение ключа до = и значения после =?
|
|||
8
pavlushov
08.02.23
✎
15:12
|
(7) а где?
|
|||
9
hockeyist
08.02.23
✎
15:12
|
(6) (5) Ага, а потом еще раз разложить каждый элемент массива.
Как по мне, что в лоб, что по лбу. ТС написал функцию, ну и молодец |
|||
10
pavlushov
08.02.23
✎
15:13
|
(5) спасибо! клевая функция
|
|||
11
Сергиус
08.02.23
✎
15:13
|
(7)ну дальше уж дело техники)
|
|||
12
PR
08.02.23
✎
15:14
|
(9) Ну да, Баба Яга как всегда против
Второй раз раскладывать ничего не нужно, кстати, просто ищешь = и все |
|||
13
PR
08.02.23
✎
15:14
|
(8) Вот именно, что нигде
|
|||
14
PR
08.02.23
✎
15:14
|
(10) Пожалуйста
|
|||
15
pavlushov
08.02.23
✎
15:17
|
(5) так лучше?
Функция xwwwformurlencodedВСтруктуру(ТелоЗапроса) Структура = Новый Структура; МассивСтрок = СтрРазделить(ТелоЗапроса, "&"); Для Каждого ТекСтрока Из МассивСтрок Цикл Поз = СтрНайти(ТекСтрока, "="); Ключ = Лев(ТекСтрока, Поз-1); Значение = Прав(ТекСтрока, СтрДлина(ТекСтрока) - Поз); Структура.Вставить(Ключ, Значение); КонецЦикла; Возврат Структура; КонецФункции |
|||
16
pavlushov
08.02.23
✎
15:18
|
(13) вы к тому что не факт что символ "=" является разделителем ключа и значения?
|
|||
17
hockeyist
08.02.23
✎
15:18
|
(12) Покажи без второго расклада. Код сильно сложнее будет, чем в (3)?
|
|||
18
pavlushov
08.02.23
✎
15:22
|
(17) так?
Функция xwwwformurlencodedВСтруктуру(ТелоЗапроса) Структура = Новый Структура; МассивСтрок = СтрРазделить(ТелоЗапроса, "&"); Для Каждого ТекСтрока Из МассивСтрок Цикл Мас = СтрРазделить(ТекСтрока, "="); Структура.Вставить(Мас[0], Мас[1]); КонецЦикла; Возврат Структура; КонецФункции |
|||
19
Сергиус
08.02.23
✎
15:24
|
+(11)ПараметрыИзСтроки на это есть
|
|||
20
hockeyist
08.02.23
✎
15:26
|
(18) Не. Он грозиться показать алгоритм с одним СтрРазделить по "="
|
|||
21
Сергиус
08.02.23
✎
15:26
|
+(19)То бишь резюмируя, делается так: 1)Получаем массив с разбитыми подстроками РазложитьСтрокуВМассивПодстрок, 2)Для каждой подстроки вызываем ПараметрыИзСтроки.
|
|||
22
pavlushov
08.02.23
✎
15:31
|
(21) РазложитьСтрокуВМассивПодстрок и ПараметрыИзСтроки - а это откуда брать? это функции БСП?
|
|||
23
Сергиус
08.02.23
✎
15:34
|
(22)общий модуль СтроковыеФункцииКлиентСервер, ну или поиском у себя поищи.
|
|||
24
pavlushov
08.02.23
✎
15:59
|
(23) понятно, мне не подходит, у меня пустая конфа)
|
|||
25
Сергиус
08.02.23
✎
16:17
|
(24)типовых под рукой нет совсем? можно оттуда копирнуть, 2 функции
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |