Интеграция устаревших систем, таких как 1С:Предприятие 7.7, с современными веб-сервисами и API часто вызывает вопросы из-за отсутствия встроенных механизмов работы с JSON и актуальными протоколами шифрования. В этой статье мы разберем два надежных способа отправки данных: использование внешнего инструмента cURL и прямое обращение через COM-объект WinHttp.WinHttpRequest.5.1.
Если вам требуется высокая надежность, особенно при работе с большими объемами данных или современными протоколами TLS, лучше всего делегировать задачу специализированному инструменту cURL. Этот метод позволяет вынести сетевую активность за пределы процесса 1С, что предотвращает зависания платформы.
Для реализации этого метода нам потребуется вызвать curl.exe из кода 1С. Рассмотрим пример отправки JSON-файла для авторизации:
// ИмяФайлаИсходящий - путь к вашему файлу с данными в формате JSON
// ФайлОтвета - путь, куда сохранить ответ от сервера
КоманднаяСтрока = "curl.exe -X POST https://адрес_сервиса/api/ -H ""content-type: application/json;charset=UTF-8"" --data-binary @" + ИмяФайлаИсходящий + " --output " + ФайлОтвета;
ЗапуститьСистему(КоманднаяСтрока);
Преимущества этого подхода:
cURL самостоятельно справляются с проверкой SSL-сертификатов.Если вы не хотите использовать внешние исполняемые файлы, можно воспользоваться системным объектом Windows WinHttp.WinHttpRequest.5.1. Этот метод удобен тем, что он является «родным» для ОС, но требует осторожности при работе с большими файлами (свыше 150 кБ), так как 1С 7.7 может перестать отвечать.
Давайте разберем по шагам, как настроить и отправить запрос:
СоздатьОбъект("WinHttp.WinHttpRequest.5.1").Content-Type, чтобы сервер понял, что мы отправляем именно JSON.Send().Рассмотрим пример реализации POST-запроса:
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2, "UTF-8"); // Установка кодировки
WinHttp.SetTimeouts(10000, 10000, 10000, 10000); // Таймауты в миллисекундах
Попытка
WinHttp.Open("POST", "https://ваш_адрес_сервиса", 0);
WinHttp.SetRequestHeader("Content-Type", "application/json;charset=UTF-8");
WinHttp.Send(ТекстВашегоJson);
Если WinHttp.Status = 200 Тогда
Ответ = WinHttp.ResponseText();
Сообщить("Успешно: " + Ответ);
Иначе
Сообщить("Ошибка: " + WinHttp.Status + " - " + WinHttp.StatusText);
КонецЕсли;
Исключение
Сообщить("Ошибка соединения: " + ОписаниеОшибки());
КонецПопытки;
В процессе разработки часто возникают ошибки, связанные с неправильным формированием JSON или некорректными заголовками. Чтобы увидеть, какие именно данные уходят из вашей 1С, рекомендуем использовать специализированное ПО для перехвата трафика:
При работе с внешними API из 1С 7.7 обратите внимание на следующие нюансы:
UTF-8 без метки BOM. В противном случае многие API вернут ошибку валидации.SetTimeouts. В условиях нестабильной связи сервер может не ответить вовремя, и без ограничения времени выполнения 1С «зависнет» навсегда.Выбор между cURL и WinHTTP зависит от вашей задачи. Для простых запросов и небольших данных WinHTTP будет вполне достаточно. Однако для сложных интеграций с современными защищенными порталами мы рекомендуем использовать cURL как более гибкий и независимый инструмент.