Имя: Пароль:
1C
1С v8
Как правильно высылать Post запрос в 1с?
, , 1CQuery
0 New_Tesla
 
11.06.22
16:36
всем привет!


вот сделал обработку для обмена с сайтом, тока не пойму чего она не отправляет пост запрос

т.е гет запрос норм отправлется на сайт. а при отправке пост запроса приходит ошибка 400

т.е что запрос не правильный

  

#1 NewTesla 11.06.2022 10:27:2811.06.2022 10:28:29 отредактировано NewTesla
сосотяние = 400

само тело ответа =

Скрытый текст

{"error":{"errorKey":"Could not read content from HTTP request body:
Unexpected character ('' (code 65279 / 0xfeff)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')\n at [Source: (BufferedReader); line: 1, column: 2]","statusCode":400,"briefSummary":"05100223 Could not read content from HTTP request body: Unexpected character ('' (code 65279 / 0xfeff)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')\n at [Source: (BufferedReader); line: 1, column: 2]","stackTrace":"For security reasons the stack trace is no longer displayed, but the property is kept for previous versions","descriptionURL":"https://api-explorer.alfresco.com"}}
1 New_Tesla
 
11.06.22
16:38
вот текст обработки

Процедура КнопкаВыполнитьНажатие(Кнопка)  
    
    
    СтрокаДжойсон = ПолучитьСтрокуДжойсон1();
    
    сайт               = "crhsn";
    пользовательсайта = "crhsn";
    пароль            = "crhsn";
    
    
    ssl = Новый ЗащищенноеСоединениеOpenSSL(
                Новый СертификатКлиентаWindows(
                                СпособВыбораСертификатаWindows.Выбирать),
                Новый СертификатыУдостоверяющихЦентровWindows());
                
    Соединение  = Новый HTTPСоединение(сайт,443,пользовательсайта,пароль,,,ssl);
    
    
    ГетЗапрос   = Новый HTTPЗапрос("/alfresco/api/-default-/public/alfresco/versions/1/nodes/-my-/children");
    
    
    
    Результат   = Соединение.Получить(ГетЗапрос);
    
    
    Ресурс     = "/alfresco/api/-default-/public/alfresco/versions/1/people/-my-/favorites";
    СтрокаJSON = ЭлементыФормы.ПолеВвода1;
    
    
    Заголовки = Новый Соответствие;    
    Заголовки.Вставить("Content-Type", "application/json");
    

    Запрос = Новый HTTPЗапрос(Ресурс, Заголовки);    
    
   // Запрос.УстановитьТелоИзСтроки(СтрокаДжойсон);  
    Запрос.УстановитьТелоИзСтроки(СтрокаДжойсон);  

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

&НаКлиенте
Функция ПолучитьСтрокуДжойсон1()
        
    Структура = Новый Структура("target");
    
    
    Структура1 = Новый Структура("file");
    
    Структура11 = Новый Структура("guid");
    
    Структура11.Вставить("guid","abcde-01234");
    
    
    
    Структура1.Вставить("file",Структура11);
    
    Структура.Вставить("target",Структура1);
    
    
        
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Структура);
    
    СтрокаJSON = ЗаписьJSON.Закрыть();
        
    Возврат СтрокаJSON;

КонецФункции
2 New_Tesla
 
11.06.22
16:40
посоморел инфу, вроде все норм, чего не фурычит  не совсем понятно

т.е если само тело запроса поместить в постман, то прога его отправляет
3 Бабрак Кармаль
 
11.06.22
16:59
BOM убери
4 MyNick
 
12.06.22
09:07
Написано же почти по-русски
Unexpected character ('' (code 65279 / 0xfeff)
5 New_Tesla
 
12.06.22
20:16
(3) да, СПАСИБО БОЛЬШОЕ! помогло, не знаю как сюа скрин вставить, вобщем

там где пишем

Запрос.УстановитьТелоИзСтроки(СтрокаДжойсон);  

ретиьим параметром надо предать отключение BOM
6 New_Tesla
 
12.06.22
20:21
Запрос.УстановитьТелоИзСтроки(СтрокаДжойсон);  

и второй вопрос сразу задам, если можно)

в пост запросе  я получаю айдишник
потом, взяв этот айдишник я должен с помощью пут запроса отправить им данные файла в бейс 64
НО! они мне дали только URL запроса node/{id}/content

неужто строку Бейс 64 надо в URL записывать, вместо слова content?
7 Бабрак Кармаль
 
12.06.22
21:32
(6) Лучше в документации посмотри.

Навскидку, тут кажется что тушку файла в base64 надо передавать в теле запроса. В урле указываешь идентификатор, как они хотят - вместе с "content", а метод PUT говорит о том что это заливка файла. Вроде все по RESTовски. Правда, с Content-Type непонятно, что они хотеть будут...

Иди в документацию, короче.
8 New_Tesla
 
13.06.22
05:34
(7) ок, спс!!!

они значит забыли прописать параметры запроса)

API эндпоинт
Для загрузки контента файла используется метод PUT /nodes/{nodeId}/content, где в параметре nodeId нужно передать id документа, который был создан на предыдущем шаге.

URL запроса:

/1/nodes/1d113dc7-4b7f-4438-ad0e-ac0152548606/content

Тело запроса
В теле запроса передаётся двоичное содержимое файла РЛ. Заголовок Content-Type должен соответствовать MIME-типу передаваемого содержимого или application/octet-stream.

Ответ
В случае успешного обновления в ответе с кодом 200 OK будет JSON, содержащий параметры документа.

Аутентификация
Используется базовая HTTP аутентификация (Basic). Пользователь клиента API создаётся в ECM и добавляется в сайт заказчика с правами Manager.
9 New_Tesla
 
15.06.22
05:46
всем привет!

вот еще вопрос:
до того с прогерами от портала договаривались что я им буду передавать строку бейс 64 (сначала в 1с кодируем файл в двоичные данные, потом можно закодировать в строку бейс 64)

щас они гооворят что надо файл так передавать  "читаеш и передаешь сразу"

шо они могут имеь ввиду?

т.е мы же не можем им отправить значение "ЧтениеФайла" из 1с
10 Ёпрст
 
15.06.22
09:35
(9) ты общаешься с людьми, далекими от 1с. Простототлай им строку в басе64 и всё.
11 Ёпрст
 
15.06.22
09:36
*Просто отдай им
12 New_Tesla
 
15.06.22
19:54
(10) да они прост сервис поменяли и поэтому попросили просто файл передавать без кодирования
13 New_Tesla
 
15.06.22
19:55
Запрос.УстановитьТелоИзСтроки(СтрокаДжойсон);
Запрос.УстановитьИмяФайлаТела("путь к файлу");

вот, вторая строчка)
оказвается, !С могет напряму както файл передавать)
14 New_Tesla
 
15.06.22
20:14
* вторая строчка относится к PUT запросу