Имя: Пароль:
1C
1С v8
Отправка файл из 1С
,
0 hellas78
 
29.11.21
11:29
Добрый день.

У меня проблема с пост запросом. Я хочу отправить файл на сторонний веб-сайт. Но не получаеться.

Все время ответ от сервера: Неудачная попытка соединения: {ВнешняяОбработка.СохранитьРисункиНоменклатур.Форма.Форма.Форма(403)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка при выполнении файловой операции  '/api/v1/services/bulkImport/create/859119df-a608-4c88-aa98-60704647c7e3': Ошибка работы с Интернет:  внутренняя ошибка сервера (500). {
    "message": "Server Error"
} : Ошибка работы с Интернет:  внутренняя ошибка сервера (500)

Вот функция которую я написал. Можете помочь, где ошибку делаю?   Заранее блогодарен.

Функция ОповеститьСервер(ФайлПрайса, URLСайта, Ресурс,ТокенАвто) Экспорт
          
   Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
   ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.tmp";
   ИмяФайлаДляЗагрузки = ФайлПрайса;
   ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt";
   КодироватьФайл = Ложь;
  
   МассивФайловДляОбъединения = Новый Массив;
   ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
   ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.ANSI, Символы.ПС, Ложь);
   ФайлОтправкиНачало.ЗаписатьСтроку("--" + Boundary);
   ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""" + ИмяФайлаДляЗагрузки + """");
   ФайлОтправкиНачало.ЗаписатьСтроку("Content-Type: application/x-octet-stream");
   ФайлОтправкиНачало.ЗаписатьСтроку("");
   ФайлОтправкиНачало.Закрыть();
   МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);
   ИмяФайлаДляЗагрузкиВременный = ПолучитьИмяВременногоФайла("tmp");
   КопироватьФайл(ИмяФайлаДляЗагрузки, ИмяФайлаДляЗагрузкиВременный);
   МассивФайловДляОбъединения.Добавить(ИмяФайлаДляЗагрузкиВременный);
   ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt");
   ФайлОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.ANSI, Символы.ПС, Ложь);
   ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary);
   ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary + "--");
   ФайлОтправкиКонец.Закрыть();
   МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);
  
   ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
   ЗаголовокHTTP = Новый Соответствие();
   ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary+"; charset=ansi");
   ЗаголовокHTTP.Вставить("Accept", "application/json; charset=utf-8");
   ЗаголовокHTTP.Вставить("Authorization", "Bearer " +ТокенАвто);

   ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
   РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
   ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
   СерверПриемник = URLСайта;
   НТТР = Новый HTTPСоединение(СерверПриемник);
   АдресСкрипта = Ресурс;
   Попытка
       НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСкрипта, ИмяФайлаОтвета, ЗаголовокHTTP);
   Исключение
       #Если Клиент Тогда
           Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки());
       #Иначе
           ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки());
       #КонецЕсли
   КонецПопытки;
  
   УдалитьФайлы(ИмяФайлаОтправки);
   Если НЕ КодироватьФайл Тогда
       Для каждого ЭлементМассива Из МассивФайловДляОбъединения Цикл
           УдалитьФайлы(ЭлементМассива);
       КонецЦикла;
   КонецЕсли;
  
КонецФункции
1 ГеннадийУО
 
29.11.21
11:31
Не надо отправлять вручную, пользуйтесь готовой библиотекой HTTP коннектор.
2 Галахад
 
гуру
29.11.21
11:35
Код ответа 500. Скорее всего, что-то падает на той стороне.
3 hellas78
 
29.11.21
11:37
(2) На стороне сервера говорят, что не правильный JSON- запрос. С Постманом проверял, все работает.
4 Галахад
 
гуру
29.11.21
11:47
(3) Хм. А где JSON?
5 hellas78
 
29.11.21
11:51
(4) Ну сам файл в формате JSON.  Ну сервер хочет файл в формате JSON

Вот пример из файла, то есть что в самом файле:

[
    {
        "name": "10046 PORTAS. BASE COMPLETO",
        "description": "10046 PORTAS. BASE COMPLETO",
        "sku": "NOM00014519",
        "price": "7",
        "new_price": "3,5",
        "size": "0",
        "stock": 1,
        "category": "",
        "sub_category": ""
    }
]
6 ДенисЧ
 
29.11.21
11:52
Так надо спросить на стороне сервера, что им не нравится в файле. Мы же этого сервера не видим.
7 hellas78
 
29.11.21
11:58
(6)  Я спросил и в ответ написали:  Ошибка в формате JSON. А если отправить с помощью Postman,  то все ок.

В стороне сервера ждут:

Headers:

Key    Value    Description
Accept    application/json    
Authorization    Bearer {token}    


Body:

Key    Value    Description
file        Fayl

Вроде все отправлю, но ответа нето
8 Галахад
 
гуру
29.11.21
11:59
(5) Хм. Это вот это JSON?

"--" + Boundary
"Content-Disposition: form-data; name=""file""; filename=""" + ИмяФайлаДляЗагрузки + """"
"Content-Type: application/x-octet-stream"
[
    {
        "name": "10046 PORTAS. BASE COMPLETO",
        "description": "10046 PORTAS. BASE COMPLETO",
        "sku": "NOM00014519",
        "price": "7",
        "new_price": "3,5",
        "size": "0",
        "stock": 1,
        "category": "",
        "sub_category": ""
    }
]
"--" + Boundary
"--" + Boundary + "--"
9 hellas78
 
29.11.21
12:03
(8) У меня вот такой получается:

--0a6be27e61744319bdabd8cd9d811e26
Content-Disposition: form-data; name="file"; filename="D:\1C\1C_Klientler\Skandinaviya_Evi_Murad\Fayl.json"
Content-Type: application/x-octet-stream

[
    {
        "name": "10046 PORTAS. BASE COMPLETO",
        "description": "10046 PORTAS. BASE COMPLETO",
        "sku": "NOM00014519",
        "price": "7",
        "new_price": "3,5",
        "size": "0",
        "stock": 1,
        "category": "Hamam otağı",
        "sub_category": "Tualet fırçaları"
    }
]--0a6be27e61744319bdabd8cd9d811e26
--0a6be27e61744319bdabd8cd9d811e26--
10 Галахад
 
гуру
29.11.21
12:09
(9) Ну, чо-то такой себе JSON. Может на пробу убрать лишнее?
11 Garykom
 
гуру
29.11.21
12:11
(9) а точно надо json отправлять через "Content-Type: application/x-octet-stream"
Вместо "Content-type: application/json"
12 Garykom
 
гуру
29.11.21
12:11
Гм а в (0) так и ваще "Content-Type", "multipart/form-data"
))
13 hellas78
 
29.11.21
12:42
(10) Ну например, что можно убрать?
14 hellas78
 
29.11.21
13:43
Ребята как мне решать эту задачу?
15 crasler
 
29.11.21
14:09
(14) Сначала нужно определиться что тебе надо отправлять множественные бинарные данные (файлы) или JSON текст!
16 hellas78
 
29.11.21
14:35
(14) Мне надо (то есть сервер так хочет) чтобы я отправил файл с форматом "json". И внутри JSON-текстом
17 hellas78
 
29.11.21
14:38
(15)Мне надо (то есть сервер так хочет) чтобы я отправил файл с форматом "json". И внутри JSON-текстом
18 arsik
 
гуру
29.11.21
14:40
(17) Покажи нам этот кусок мануала.
19 polosov
 
29.11.21
14:41
(17) Запрос = Новый HTTPЗапрос(АдресРесурса);
Запрос.Заголовки..... - добавить нужные
Запрос.УстановитьТелоИзСтроки(ТвойJSONСтрокой);
Результат = HTTP.ОтправитьДляОбработки(Запрос);
20 polosov
 
29.11.21
14:42
+(17) Или воспользуйся https://github.com/vbondarevsky/Connector как все нормальные люди делают.
21 hellas78
 
29.11.21
14:55
Всем большое спасибо, ошибка была вот здесь:

]--0a6be27e61744319bdabd8cd9d811e26
--0a6be27e61744319bdabd8cd9d811e26--


Вместо этого должна было быть формат такой:

]
--0a6be27e61744319bdabd8cd9d811e26
--0a6be27e61744319bdabd8cd9d811e26--


Тема Закрыто
22 hellas78
 
29.11.21
14:55
(20) Да вы правы коннектор самый лучший.
23 Muskat
 
29.11.21
15:31
Привет
24 Muskat
 
29.11.21
15:32
Всем