Имя: Пароль:
1C
1С v8
1C POST запрос к сайту, JSON, экранируются кавычки
,
0 Darhon
 
15.02.19
12:35
Доброго времени суток. При отправке из 1С запроса ПОСТ, с строкой json внутри на сервер приходит запрос с экранированными кавычками.

\"rateId\":\"0\",\"email\":\"[email protected]\",\"phone\":\" 79111111111\"

Вот код

Соединение = Новый HTTPСоединение(
    "***************.net", // сервер (хост)
    443, // порт, по умолчанию для http используется 80, для https 443
    , // пользователь для доступа к серверу (если он есть)
    , // пароль для доступа к серверу (если он есть)
    , // здесь указывается прокси, если он есть
    , // таймаут в секундах, 0 или пусто - не устанавливать
    Новый ЗащищенноеСоединениеOpenSSL()
    );
    
    Заголовки = Новый Соответствие;
    
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
    
//Создали запись ЗаписьJSON
    ЗаписьJSON = Новый ЗаписьJSON;
    //Задаем параметры без переноса строк, можно и с переносом, как кому нравится
    тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);  
    ЗаписьJSON.УстановитьСтроку(тПараметрыJSON);
    
    СтруктураДанныхJSON = Новый Структура;
СтруктураДанныхJSON.Вставить("rateId", "0");
СтруктураДанныхJSON.Вставить("email", "[email protected]");
СтруктураДанныхJSON.Вставить("phone", "+79111111111");
        
    
    
      ЗаписатьJSON(ЗаписьJSON, СтруктураДанныхJSON);
      СтрокаJS = ЗаписьJSON.Закрыть();
    // Получаем текст корневой страницы через GET-запрос.
    Запрос = Новый HTTPЗапрос("/order/create", Заголовки);
    Запрос.УстановитьТелоИзСтроки("body="+СтрокаJS);
    // Если бы нужна была другая страница, мы бы указали,
    // например, "/about" или "/news".

    Результат = Соединение.ОтправитьДляОбработки(Запрос);


Как избавится от экранов в запросе??
1 Darhon
 
15.02.19
12:36
("Content-type", "application/json");  пробовал
Приходит просто пустой запрос
2 Вафель
 
15.02.19
12:41
так у тебя не json, а строка url содержащая json
3 Darhon
 
15.02.19
12:44
ну да строка содержащая json. сервер ее нормально принимает только экраны все дело портят
4 Darhon
 
15.02.19
12:55
В 1С отладчиком смотрю, никаких экранирующих символов в строке нет. Если строку просто отправлять на сервер не форматируя в json то тоже приходит без искажений
5 Nyoko
 
15.02.19
13:03
Запрос.УстановитьТелоИзСтроки("body="+СтрокаJS);
замени на
  Запрос.УстановитьТелоИзСтроки(СтрокаJS, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
6 Darhon
 
16.02.19
13:27
(5)
к сожалению не помогло, все без изменений
7 Darhon
 
16.02.19
13:55
Самое интересное что

Запрос.УстановитьТелоИзСтроки("rateId=0&[email protected]&phone=+79111111111");

Отправляется нормально и сервер ее нормально понимает.

А вот так вот отправляется

ЗаписатьJSON(ЗаписьJSON, СтруктураДанныхJSON);
      СтрокаДЖ=ЗаписьJSON.Закрыть();
    Запрос = Новый HTTPЗапрос("/order/create", Заголовки);
    Запрос.УстановитьТелоИзСтроки(СтрокаДЖ);
отправляется норм (отладчик строкаДЖ показывает в виде нормальной строки
А на сервер приходит в виде "/"rateId"/":"/"0"/".....
само собойсервер не воспринимает такое (
8 Necessitudo
 
16.02.19
22:00
Дай-ка угадаю - сервер на Java?
9 Necessitudo
 
16.02.19
22:05
Попробуй так -
Content-Type: text/plain
10 dmitryds
 
16.02.19
22:17
application/x-www-form-urlencoded;charset=utf-8

Не подразумевает отправку json