Имя: Пароль:
1C
1С v8
Есть ли в 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 функции