Имя: Пароль:
1C
1С v8
8.3.9, json, интеграция с веб сервисом.
,
0 yarik
 
14.11.16
16:07
Всем привет.
Есть веб сервис, на который из 1с надо отправлять данные с помощью POST запросов.
На 8.2 все работает без проблем.
При переходе на 8.3.9 тот же код получает в ответ от сервера ошибку 400

{"status":400,"error":"Invalid JSON request","message":"unexpected character at line 1, column 1 [parse.c:664]"}

Посмотрел фидлером, что там 1с отправляет на сервер:
POST https://xxx.com/api/v3/xxx/ HTTP/1.1
Host: xxx.com
User-Agent: 1C+Enterprise/8.3
Accept: */*
Content-Type: application/json
X-User-Api-Token: xxx
Content-Length: 564

{
    "data": {
        "attr1": "5.11",
        "attr2": "76063",
        "attr3": "5.11",
        "attr4": "fff",
        "attr5": "2016-11-09T12:00:00+02:00"
    }
}

В 8.2 все тоже самое, но почему-то Content-Length: 561

Для работы с json в 8.2 использовалась библиотека
// JSON Парсер/Сериализатор
// http://legionwfz.blogspot.com/2012/03/1json.html

Пробовал использовать стандартные (из 8.3) средства для работы с JSON - проблема та же.
JSON как видим отправляет валидный, где проблема - не пойму.
Может кто сталкивался?
1 badboychik
 
14.11.16
16:09
проблема в первом символе, возможно строка в UTF неверно сохранена, надо без BOM а у тебя с BOM
2 Fragster
 
гуру
14.11.16
16:10
(0) используй нативный объект 1с ЗаписьJSON
3 yarik
 
14.11.16
16:16
(2) пробовал так
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, КоллекцияОбъектов);
    РезультатСтрока = ЗаписьJSON.Закрыть();

Результат тот же - 400 ошибка.

Content-Length: 524
{ "data": {"attr1": "5.11","attr2": "76063","attr3": "5.11","attr4": "fff","attr5": "2016-11-09T12:00:00+02:00" } }

(1)  сейчас покопаю в эту сторону
4 yarik
 
14.11.16
16:27
(1) Вуаля, убрал ВОМ символы и все полетело. Спасибо.
Если кому интересно как убрать, один из способов - http://j008.ru/ps/013_utf_bom_out
5 Мойдодыр
 
14.11.16
16:29
(4) у ЗаписьJSON есть такой параметр
6 Мойдодыр
 
14.11.16
16:30
ОткрытьФайл(<ИмяФайла>, <Кодировка>, <ДобавлятьBOM>, <Параметры>)
7 Serginio1
 
14.11.16
16:43
8 Fragster
 
гуру
14.11.16
16:48
(7) 4 года прошло...
9 Asmody
 
14.11.16
17:02
(7) Я в результате завел функцию

Функция Кодировка_UTF8_NoBOM()
    Возврат "CESU-8";
КонецФункции


и ставлю её где нужно
10 Asmody
 
14.11.16
17:03
(9)+ потому что я постоянно забывал это магическое сочетание букв