Имя: Пароль:
1C
 
1c Post запрос ошибка 422
0 andrey i1c
 
21.01.20
17:34
Прилагаю текст запроса. Данные адреса сервера сейчас условные. На реальных данных сервера при выполнении происходит ошибка 422. Я полагаю все соединение проходит, но сам json файл не записывает в тело данные. Вот тут это делается запросPOST.УстановитьТелоИзСтроки("json=" + СтрокаJS, "CESU-8");
в файл ответа приходит ответ
{"json":["JSON \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c"]}

В чем может быть дело?
    


        ЗаписьJSON = Новый ЗаписьJSON;
    ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);  
    ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
    ЗаписатьJSON(ЗаписьJSON, МассивRoot);
    СтрокаJS = ЗаписьJSON.Закрыть();
    
    ФайлОтвета = "C:\Users\User\Documents\temp\test.txt";
    
    Если Объект.SLL Тогда
        HTTPСоединение         = Новый HTTPСоединение("199.6.2.51", 443,,,,,Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено));
    Иначе
        HTTPСоединение         = Новый HTTPСоединение("199.6.2.51", 80);
    КонецЕсли;
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-type", "application/json");

    запросPOST = Новый HTTPЗапрос("/v5/kontragets/update?token=авлолыводлфыовдв", Заголовки);
    
    запросPOST.УстановитьТелоИзСтроки("json=" + СтрокаJS, "CESU-8");
    
    ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(запросPOST, ФайлОтвета);
    Если НЕ (ОтветHTTP.КодСостояния >= 200 И ОтветHTTP.КодСостояния < 300) Тогда
        Сообщить("Выгрузка пакета не произведена: Код ответа сервера - "+ОтветHTTP.КодСостояния+", Ответ: "+ОтветHTTP.ПолучитьТелоКакСтроку());
    Иначе    
        Сообщить("Успешно выгружен пакет");
    КонецЕсли;
1 Ёпрст
 
21.01.20
17:49
(0) а точно, такая кодировка нужна ?
И точно нужна строка "json=" в теле ?
2 andrey i1c
 
21.01.20
17:52
(1) я по разному пробовал скорее даже вот тут что то не так происходит ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(запросPOST, ФайлОтвета);
3 Ёпрст
 
21.01.20
17:55
ну и сам json, нет ни начала массива, ни конца..
4 Ёпрст
 
21.01.20
17:55
в массиврут что хоть ? И какая строка json на выходе ?
5 pechkin
 
21.01.20
17:59
он тебе говорит
json не должен быть пустым
6 Ёпрст
 
21.01.20
18:00
Мот так, не ?


ЗаписьJSON = Новый ЗаписьJSON;
        ЗаписьJSON.ПроверятьСтруктуру = Ложь;
        ЗаписьJSON.УстановитьСтроку();
        ЗаписьJSON.ЗаписатьНачалоМассива();
ЗаписатьJSON(ЗаписьJSON, МассивRoot);
ЗаписьJSON.ЗаписатьКонецМассива();
    СтрокаJS = ЗаписьJSON.Закрыть();

        запросPOST.УстановитьТелоИзСтроки(СтрокаJS, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
            HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(запросPOST);
7 pechkin
 
21.01.20
18:00
может нужно посылать
{"json": ТекстJSON}
8 andrey i1c
 
21.01.20
18:03
Строка json


[
{
  "code_1c": 65,
  "name": "Багет особый 300 гр",
  "price_base": "15",
  "price_retail": "60",
  "currency": "RUB",
  "weight": "185",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "Вкусный хлеб",
  "categories_id": 69
},
{
  "code_1c": 66,
  "name": "Багет Провансаль 200 гр",
  "price_base": "16",
  "price_retail": "64",
  "currency": "RUB",
  "weight": "240",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 69
},
{
  "code_1c": 67,
  "name": "Батон нарезной 300 гр",
  "price_base": "17",
  "price_retail": "68",
  "currency": "RUB",
  "weight": "315",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 69
},
{
  "code_1c": 68,
  "name": "Булочка улитка с корицей 100 гр",
  "price_base": "15,5",
  "price_retail": "62",
  "currency": "RUB",
  "weight": "152",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 69
},
{
  "code_1c": 59,
  "name": "Вак Балиш 110 гр",
  "price_base": "20",
  "price_retail": "80",
  "currency": "RUB",
  "weight": "100",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 70
},
{
  "code_1c": 60,
  "name": "Ватрушка с творогом 90 гр",
  "price_base": "30",
  "price_retail": "120",
  "currency": "RUB",
  "weight": "0",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 70
},
{
  "code_1c": 61,
  "name": "Жюльен 140 гр",
  "price_base": "25",
  "price_retail": "100",
  "currency": "RUB",
  "weight": "0",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 70
},
{
  "code_1c": 64,
  "name": "Закрытая пицца с курицей 140 гр",
  "price_base": "31,5",
  "price_retail": "126",
  "currency": "RUB",
  "weight": "280",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 71
},
{
  "code_1c": 62,
  "name": "Киш с картофелем и грибами 90 гр",
  "price_base": "11",
  "price_retail": "44",
  "currency": "RUB",
  "weight": "0",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 70
},
{
  "code_1c": 63,
  "name": "Киш с курицей и сыром 90 гр",
  "price_base": "24",
  "price_retail": "96",
  "currency": "RUB",
  "weight": "0",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 70
},
{
  "code_1c": 57,
  "name": "Кокрок с творогом 85 гр",
  "price_base": "19",
  "price_retail": "76",
  "currency": "RUB",
  "weight": "50",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 72
},
{
  "code_1c": 58,
  "name": "Кокрок с яблоком 90 гр",
  "price_base": "20,55",
  "price_retail": "82,2",
  "currency": "RUB",
  "weight": "150",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "",
  "categories_id": 72
}
]
9 andrey i1c
 
21.01.20
18:08
(6) та же ошибка 422
10 Ёпрст
 
21.01.20
18:10
(8) у тя нет начала массива в коде - [] не будет у тя в строке
11 andrey i1c
 
21.01.20
18:10
(7) не помогает
12 andrey i1c
 
21.01.20
18:13
(10) это из за массива, но в целом это все строка https://yadi.sk/i/bWm7d7YlDLIeag
13 Garykom
 
гуру
21.01.20
18:13
(0) Для начала возьми Postman (или банальный curl) и проверь что твой CESU-8 точно работает на тестовом примере.
Вот если все ок то тогда уже трабла в 1С.
14 pechkin
 
21.01.20
18:14
попробуй такой
{ json: [
{
  "code_1c": 65,
  "name": "Багет особый 300 гр",
  "price_base": "15",
  "price_retail": "60",
  "currency": "RUB",
  "weight": "185",
  "unit": "г",
  "discount": 0,
  "discount_unit": "v",
  "type": 1,
  "time_creation": 0,
  "new": 0,
  "top": 0,
  "knd": 0,
  "kfe": 0,
  "sku": 0,
  "hide": 0,
  "specification_ids": "123,456",
  "description": "Вкусный хлеб",
  "categories_id": 69
}
]
}
15 andrey i1c
 
21.01.20
18:15
(13) там работает в Postman
16 andrey i1c
 
21.01.20
18:15
пробовал из 1с в таком формате таже ошибка

{
"code_1c": 185
}
17 Garykom
 
гуру
21.01.20
18:21
(15) Значит добейся чтобы из 1С была такая же строка как из Postman.
Для проверки подними сервис у себя и на него стучишься Postman и 1C и смотришь в чем разница.

Сервис/сервер банально на Go поднять
https://golang.org/doc/articles/wiki/#tmp_1

package main

import (
    "fmt"
    "log"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}


или на NodeJS
https://code.tutsplus.com/ru/tutorials/fake-rest-api-up-and-running-using-json-server--cms-27871
18 Garykom
 
гуру
21.01.20
18:27
(17)+ Только вместо одного r.URL добавить вывод в консоль (или я бы в файл сделал) всех данных из запроса (r *http.Request) в включая заголовок и тело.
И сразу понятно кто парит ты из 1С или что.
19 Ёпрст
 
21.01.20
20:31
(0) Так еще, на всякий
20 Ёпрст
 
21.01.20
20:34

СтрокаJSON = ЗаписьJSON.Закрыть();
    HTTPЗапрос = Новый HTTPЗапрос("/v5/kontragets/update?token=авлолыводлфыовдв/");
    
    СтрокаJSON = КодироватьСтроку(СтрокаJSON, СпособКодированияСтроки.КодировкаURL);
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
    HTTPЗапрос.Заголовки.Вставить("Token", Токен);
    HTTPЗапрос.УстановитьТелоИзСтроки("json="+СтрокаJSON,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    Если HTTPОтвет.КодСостояния<>200 Тогда
21 andrey i1c
 
22.01.20
10:26
(20) спасибо большое, вопрос решен, ваш метод Отработал! еще раз благодарен!скорее тут дело и было в параметрах заголовках.