Добрый день.
Прошу помощи.
Есть обработка для загрузки данных с заправки ОККО, работающая под 1С 8.3
Но часть баз работает все еще по 8.2.
Простой http-запрос нормально работает под 8.3,

```1c
    HTTPЗапрос = Новый HTTPЗапрос(Ресурс);
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
    HTTPЗапрос.УстановитьТелоИзСтроки(джейсонАвторизации, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    HTTPСоединение = Новый HTTPСоединение(Хост,,,,,, Новый ЗащищенноеСоединениеOpenSSL());
    Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
```

А под 8.2 возникает ошибка
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /api/erp/login. Reason:
<pre> Request failed.</pre></p><hr>Powered by Jetty:// 9.4.12.v20180830<hr/>

</body>
---
Получилось.
Оставлю на всякий случай - вдруг еще кому-либо понравится.

```1c
    HTTP = Новый HTTPСоединение(Хост,,,,,, Новый ЗащищенноеСоединениеOpenSSL());

    // Создаем временный файл, который будет
    // передан в теле POST-запроса
    ФайлЗапроса = ПолучитьИмяВременногоФайла();
    ТекстовыйФайл = Новый ТекстовыйДокумент;
    ТекстовыйФайл.УстановитьТекст(джейсонАвторизации);
    ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.ANSI);
    ФайлОтправки = Новый Файл(ФайлЗапроса);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    ФайлРезультата = ПолучитьИмяВременногоФайла();

    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
    ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");

    // Отправляем POST-запрос для обработки.
    // Параметры:
    // 1. Файл запроса - путь к файлу, содержащего
    // тело запроса
    // 2. Ресурс - ссылка на страницу веб-сервера,
    // к которой выполняется POST-запрос
    // 3. ФайлРезультат - файл, в который будет
    // помещено тело ответа сервера
    // 4. ЗаголовокHTTP - соответствие с заголовками
    // POST-запроса

    Попытка
    HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс,
    ФайлРезультата, ЗаголовокHTTP);
    Исключение
    Сообщить("Ошибка при получении токена!", СтатусСообщения.ОченьВажное);
    Возврат ";
    КонецПопытки;

    ТекстовыйФайлОтвет = Новый ТекстовыйДокумент;
    ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);
    джейсонОтвет = ТекстовыйФайлОтвет.ПолучитьТекст();
```

.
---
А вот здесь действительно нет третьего параметра.
    HTTPЗапрос.УстановитьТелоИзСтроки(джейсонАвторизации, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
И в коде на 8.2 его тоже,естественно, нет.
---
Благодарю
---
Точная версия платформы 8.2? Клиент 8.3 тонкий или толстый? Где выполняется код (на ПК пользователя или сервере)?
---
8.2.18.102
На сервере. Windows 2008 R2
---
ЗащищенноеСоединениеOpenSSL\ИспользованиеByteOrderMark
Вроде как в 8.3 только доступен?
---
с 8.3.1.
---
О чем и речь, как этот код может работать в 8.2?
---
Синтаксис-помощник:говорит, что поддерживается
HTTPСоединение (HTTPConnection)
С поддержкой таймаута
Синтаксис:

Новый HTTPСоединение(<Сервер>, <Порт>, <ИмяПользователя>, <Пароль>, <Прокси>, <Таймаут>, <ЗащищенноеСоединение>)
---
Смотрите в сторону Stunnel, этот софт как раз предназначен для решения проблем с работой SSL в платформе 8.2
---
А вот здесь действительно нет третьего параметра.
    HTTPЗапрос.УстановитьТелоИзСтроки(джейсонАвторизации, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
И в коде на 8.2 его тоже,естественно, нет.
---
Не очень понятно, вы привели код из 8.3, под 8.2 код другой, он не работает.
Не рабочий код вы не приводите, и спрашиваете почему он не работает.
Эм, у вас все с логикой в порядке?
---
Благодарю
---
Не благодарите.
---
Еще раз,
код на 8.2

```1c
    HTTPЗапрос = Новый HTTPЗапрос(Ресурс);
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
    HTTPЗапрос.УстановитьТелоИзСтроки(джейсонАвторизации, КодировкаТекста.UTF8);
    HTTPСоединение = Новый HTTPСоединение(Хост,,,,,, Новый ЗащищенноеСоединениеOpenSSL());
    Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
```
---
Наличие BOM может быть причиной проблемы.

Попробуйте так:

```1c
    HTTPЗапрос = Новый HTTPЗапрос(Ресурс);
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");

    ТекИмя = ПолучитьИмяВременногоФайла("txt");
    ЗаписьТекста = Новый ЗаписьТекста(ТекИмя,КодировкаТекста.UTF8);
    ЗаписьТекста.Записать(джейсонАвторизации);
    ЗаписьТекста.Закрыть();

    ДДанные = Новый ДвоичныеДанные(ТекИмя);
    Если Сред(ДДанные, 1, 8) = "EF BB BF" Тогда
    Строка64 = Base64Строка(ДДанные);
    Строка64 = Прав(Строка64,СтрДлина(Строка64)-4); // Удаляем 3 символа BOM
    ДДанные = Base64Значение(Строка64);

    Строка64 = Неопределено
    КонецЕсли;

    HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДДанные);
    HTTPСоединение = Новый HTTPСоединение(Хост,,,,,, Новый ЗащищенноеСоединениеOpenSSL());
    Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
```
---
Yes!
---
Отлично=)
---
Еще раз Благодарю
---
Потороптлась.
Увы не отлично
<ht ml>
<body>
<h1>Whitelabel Error Page</h1>
<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>
<div id='created'>Tue Jun 08 18:30:33 EEST 2021</div>
<div>There was an unexpected error (type=Internal Server Error, status=500).</div>
<div>Number of connections exhausted</div>
</body>
---
Можно предложить установить Fiddler и посмотреть, что реально отправляется на 8.3 и на 8.2 и чем отличается.
Вознаграждение вернул.
---
В любом случае спасибо за желание помочь.
---
Переписала процедуру:

```1c
    HTTP = Новый HTTPСоединение(Хост,,,,,Истина);
    ФайлЗапроса = ПолучитьИмяВременногоФайла();
    ТекстовыйФайл = Новый ТекстовыйДокумент;
    ТекстовыйФайл.УстановитьТекст(джейсонАвторизации);
    ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8);

    ФайлОтправки = Новый Файл(ФайлЗапроса);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());

    ФайлРезультата = ПолучитьИмяВременногоФайла();
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
    ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
    HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс,
    ФайлРезультата, ЗаголовокHTTP);
    ТекстовыйФайлОтвет = Новый ТекстовыйДокумент;
    ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);
    СтрокаОтветСервера = ТекстовыйФайлОтвет.ПолучитьТекст();
```

На сей раз ошибка более внятная.
Ошибка работы с Интернет: Peer certificate cannot be authenticated with known CA certificates

Похоже 1С 8.2 не умеет работать с ssl
---
Похоже 1С 8.2 не умеет работать с ssl Умеет, но надо ей на это явно указать:
Для установления защищенного соединения рекомендуется использовать протокол TLS как более защищенный. Использование протокола SSL v3.0 отключено при использовании по умолчанию.

При необходимости использовать протокол SSL v3.0 при подключении к веб-серверу можно использовать ключи командной строки запуска тонкого клиента /HttpsAllowSSLv3 (если при соединении с сервером может возникнуть необходимость использования протокола SSL v3.0) или /HttpsForceSSLv3 (если для соединения с сервером требуется явно указать использование протокола SSL v3.0
Источник: http://forum-1c.ru/index.php?topic=75224.0
---
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);

Это лишнее, этот заголовок платформа добавляет сама.
---
Получилось.
Оставлю на всякий случай - вдруг еще кому-либо понравится.

```1c
    HTTP = Новый HTTPСоединение(Хост,,,,,, Новый ЗащищенноеСоединениеOpenSSL());

    // Создаем временный файл, который будет
    // передан в теле POST-запроса
    ФайлЗапроса = ПолучитьИмяВременногоФайла();
    ТекстовыйФайл = Новый ТекстовыйДокумент;
    ТекстовыйФайл.УстановитьТекст(джейсонАвторизации);
    ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.ANSI);
    ФайлОтправки = Новый Файл(ФайлЗапроса);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    ФайлРезультата = ПолучитьИмяВременногоФайла();

    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
    ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");

    // Отправляем POST-запрос для обработки.
    // Параметры:
    // 1. Файл запроса - путь к файлу, содержащего
    // тело запроса
    // 2. Ресурс - ссылка на страницу веб-сервера,
    // к которой выполняется POST-запрос
    // 3. ФайлРезультат - файл, в который будет
    // помещено тело ответа сервера
    // 4. ЗаголовокHTTP - соответствие с заголовками
    // POST-запроса

    Попытка
    HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс,
    ФайлРезультата, ЗаголовокHTTP);
    Исключение
    Сообщить("Ошибка при получении токена!", СтатусСообщения.ОченьВажное);
    Возврат ";
    КонецПопытки;

    ТекстовыйФайлОтвет = Новый ТекстовыйДокумент;
    ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);
    джейсонОтвет = ТекстовыйФайлОтвет.ПолучитьТекст();
```

.