Как отправить из 1С POST-запрос с телом запроса в JSON

1. dklp 42 24.11.22 11:09 Сейчас в теме
Есть POST-запрос на Curl:

curl --request POST 'https://data.mongodb-api.com/app/endpoint/data/v1/action/findOne' \
--header 'Content-Type: application/json' \
--header 'Access-Control-Request-Headers: *' \
--header 'api-key: MY_UNIQUE_API_KEY' \
--data-raw '{ "collection":"myCollection", "database":"1c", "dataSource":"Cluster7" }'

Пробую отправить его стандартными средствами 1С, но получаю ошибку:

{МодульУправляемогоПриложения(90)}:	Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
по причине: Ошибка работы с Интернет:  Server returned nothing (no headers, no data)

Что здесь не так? Может быть, неправильно прикручено тело запроса?
SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Новый СертификатыУдостоверяющихЦентровОС());  
Соединение = Новый HTTPСоединение("data.mongodb-api.com", 443,,,,, SSL);

Заголовки = Новый Соответствие;    
Заголовки.Вставить("Content-Type", "application/json"); 
Заголовки.Вставить("Access-Control-Request-Headers", "*");
Заголовки.Вставить("api-key", "MY_UNIQUE_API_KEY");

Данные = Новый Структура();
Данные.Вставить("collection", "myCollection");
Данные.Вставить("database", "1c"); 
Данные.Вставить("dataSource", "Cluster7"); 

ЗаписьJSON = Новый ЗаписьJSON;			
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);			
ТелоЗапроса = ЗаписьJSON.Закрыть(); 
	
Запрос = Новый HTTPЗапрос("/app/endpoint/data/v1/action/findOne", Заголовки);
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);

Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);

Сообщить(Ответ.ПолучитьТелоКакСтроку());
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. user1863362 24.11.22 13:05 Сейчас в теме
(1) Начни с
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
9. dklp 42 24.11.22 13:32 Сейчас в теме
(7) Да, пробовал. Не помогает. Похоже, дело всё-таки не в теле запроса, а в защищенном соединении (1С, видимо, не может пробиться к API-серверу).
2. Varitano 24.11.22 11:31 Сейчас в теме
Проверь такой вариант:

SSL = Новый ЗащищенноеСоединениеOpenSSL();  
Соединение = Новый HTTPСоединение("data.mongodb-api.com",,,,,, SSL);
3. dklp 42 24.11.22 11:44 Сейчас в теме
(2) Изначально так и было. Но выдавало: "Ошибка работы с Интернет: Failure when receiving data from the peer"
4. Varitano 24.11.22 12:14 Сейчас в теме
(3) А версия 1С какая? Есть ли какой прокси в сети или файр? Заголовок "Access-Control-Request-Headers: *" обязателен?
5. dklp 42 24.11.22 13:00 Сейчас в теме
(4) Вообще, без "Access-Control-Request-Headers: *" в curl запрос отрабатывает нормально. Просто этот заголовок был предусмотрен регламентом API. Версия платформы 1С:Предприятие 8.3 (8.3.20.2180), конфигурация Управление торговлей, редакция 11 (11.4.14.181). По поводу прокси и файрвола не могу сказать точно (поскольку подключаюсь к облачной базе провайдера по rdp), но, по крайней мере, обмен из 1С с другими внешними сервисами (ЭДО, EDI, AkiTorg) работает.
6. Varitano 24.11.22 13:05 Сейчас в теме
(5) Я так понимаю выполняется этот запрос из 1С из окружения (сети) провайдера. Запрос CURL выполняли наверное с локальной машины, так?
8. dklp 42 24.11.22 13:13 Сейчас в теме
(7) Да, примерно так. Сервер 1С находится в сети провайдера, а запрос тестирую через web-форму на https://reqbin.com. Просто сейчас не могу выгрузить базу из облака к себе для тестирования, поскольку моя локальная платформа слетела после 15.11.2022 ("Вы стали жертвой подделки ПО").
10. Varitano 24.11.22 13:35 Сейчас в теме
(8) Было бы важно протестировать с локального компьютера. Скорее всего сеть прова не выпускает запросы к сторонним ресурсам. Можно у них уточнить.
Оставьте свое сообщение

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