|   |   | 
| 
 | Есть ли в 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 функции     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |