JSON query

1. user974746 1 03.04.24 07:23 Сейчас в теме
Здравствуйте коллеги. Необходимо отправить запрос на сайт в формате JSON вида:
{
"operationName": "AddDriver",
"variables": {
"input": {
"birthday": "1981-01-23",
"gender": "MALE",
"country": "RU",
"phone": "+7...",
"agentCarrierId": null,
"name": "Константин",
"patronymic": "Никандрович",
"surname": "Иванов",
"licenceSeries": "9931",
"licenceNumber": "123456"
}
},
"query": "mutation AddDriver($input: AddDriverInput) { addDriver(input: $input) { id __typename }}"
}

Делаю так:
ДанныеВодителя = Новый Структура;
        ДанныеВодителя.Вставить("birthday",Строка(ДатаРождения)); 
	ДанныеВодителя.Вставить("gender","MALE");
        ......

        СтруктураОтправки = Новый Структура;
	СтруктураОтправки.Вставить("operationName","AddDriver");
	СтруктураОтправки.Вставить("variables",Новый Структура("input",ДанныеВодителя));
        СтруктураОтправки.Вставить("query","mutation AddDriver($input: AddDriverInput) {\n  addDriver(input: $input) {\n    id\n    __typename\n  }\n}\n");

                ЗаписьJSON = новый ЗаписьJSON();
		ЗаписьJSON.УстановитьСтроку();
		ЗаписатьJSON(ЗаписьJSON, СтруктураОтправки);
	        ДанныеДляОтправкиJSON = ЗаписьJSON.Закрыть();  

          HTTPСоединение = Новый HTTPСоединение("мойСайт.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());    
	 запросPOST = Новый HTTPЗапрос("/carrier/graphql?operation=AddDriver"); 
         запросPOST.Заголовки.Вставить("Content-Type", "application/JSON; charset=utf-8");  
	 запросPOST.Заголовки.Вставить("Content-Length", ПолучитьРазмерДанных(ДанныеДляОтправкиJSON));   
	 запросPOST.УстановитьТелоИзСтроки(ДанныеДляОтправкиJSON,,ИспользованиеByteOrderMark.НеИспользовать); 
         Ответ = HTTPСоединение.ОтправитьДляОбработки(запросPOST);
Показать


В ответ получаю: "Unterminated string starting" и ссылается на строку с ключом query, я так понимаю, что query я не правильно преобразовываю в формат JSON.
По теме из базы знаний
Найденные решения
3. spacecraft 03.04.24 08:18 Сейчас в теме
(1)
запросPOST.Заголовки.Вставить("Content-Length", ПолучитьРазмерДанных(ДанныеДляОтправкиJSON));

Вот это точно не надо. 1С сама заполняет это и фактическая длина может отличаться от размера текста передаваемое в body..
user974746; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 03.04.24 08:18 Сейчас в теме
(1)
запросPOST.Заголовки.Вставить("Content-Length", ПолучитьРазмерДанных(ДанныеДляОтправкиJSON));

Вот это точно не надо. 1С сама заполняет это и фактическая длина может отличаться от размера текста передаваемое в body..
user974746; +1 Ответить
2. nomad_irk 80 03.04.24 07:59 Сейчас в теме
(1)просто строка вида
СтруктураОтправки.Вставить("query","mutation AddDriver($input: AddDriverInput) { addDriver(input: $input) { id  __typename\n }} ");

так же не работает?
4. user974746 1 03.04.24 08:25 Сейчас в теме
(3) Блин, всю неделю голову сломал. Спасибо огромное. Оказывается не правильно высчитывал длину контента.
Убрал и заработало.
Странно конечно, в другом, похожем запросе, без установки длины ошибки валились.
Спасибо всем.
5. пользователь 13.12.24 19:28
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот