0
Answered

Программное подключение и обработка данных через 1С

Resetych 3 years ago updated 3 years ago 11

Добрый день!

Пожалуйста, объясните почему, подскажите как и укажите на ошибки. Вот код подключения к Вашему API:

HTTPЗапрос = Новый HTTPЗапрос();

HTTPЗапрос.АдресРесурса = "/api/v2/clean";
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.Заголовки.Вставить("Authorization", "Token " + Token);
HTTPЗапрос.Заголовки.Вставить("X-Secret", Secret);
HTTPЗапрос.Заголовки.Вставить("charset", "UTF-8");
HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(ИмяВременногоФайла));//во временном файле строка вида: { "structure": [ "ADDRESS" ], "data": [ [ "Россия, Свердловская область, Шалинский городской округ, поселок Сарга, Россия" ] ] }

Соединение = Новый HTTPСоединение("dadata.ru",,,, Новый ИнтернетПрокси,, Новый ЗащищенноеСоединениеOpenSSL);

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


Проблема в том, что со временем появляется ошибка вида:

Ошибка при вызове метода контекста (ВызватьHTTPМетод)
ОтветHTTP = Соединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
по причине:
Ошибка работы с Интернет: Ошибка инициализации SSL-соединения


То есть запросы могут проходить нормально и получать полноценный ответ, а потом через некоторое время начинают сыпаться ошибки. Подскажите куда смотреть и на что обратить внимание - хотим с Вами интегрироваться, но стабильности получить не удается. Тут явно что то с SSL - может явно как то Ваши сертификаты надо подсовывать 1С. но откуда их брать или...во общем помоги пожалуйста.

Answer

Answer
Answered

Вот что удалось выяснить.


1. Документация 1С явно говорит о том, что сертификат клиента и сертификат удостоверяющего центра в простых случаях не требуются:

Создает защищенное соединение OpenSSL, использующего указанные источники клиентского сертификата и сертификатов удостоверяющих центров.
Если не указывается источник сертификатов удостоверяющих центров, то сертификат сервера не проверяется.
Если не указывается источник клиентского сертификата, то соединение возможно только с серверами, не требующими предоставления клиентского сертификата.

Это как раз наш случай: Дадата не требует клиентского сертификата.


2. Ваш код на моем тестовом сервере 1С работает без проблем.


3. Как вы пишете, у вас код тоже сначала работает, а ошибки начинают сыпаться через некоторое время.


В результате моя единственная гипотеза на сегодня — проблема в прокси-сервере или сетевых настройках, которые ваш сервер 1С использует для выхода в интернет. «Нечто» между сервером 1С и сервером Дадаты (ОС / прокси / маршрутизатор) через некоторое время перестает корректно обрабатывать исходящие соединения.


Как это можно проверить:

  1. Убедиться, что сервер 1С работает без использования прокси.
  2. Попробовать делать вызовы других сервисов, работающих через HTTPS (например, Яндекс), в течение длительного времени. Ошибка должна повториться.
  3. Попробовать работать с Дадатой по HTTP вместо HTTPS.
Under review

Добрый день! Какую ошибку вы получаете (HTTP-код и текст ошибки)?

1С возвращает ошибку "Ошибка работы с Интернет: Ошибка инициализации SSL-соединения", т.е. при вызове метода POST

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

ssl = Новый ЗащищенноеСоединениеOpenSSL(
            Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
            Новый СертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение("dadata.ru",,,,,,ssl);

И еще: вы используете прокси-сервер? Если да, попробуйте отключить его.

И с прокси и без прокси и различные варианты ЗащищенноеСоединениеOpenSSL и даже то, что Вы предложили) Может явно надо подсовывать Ваш сертификат, т.е. Новый СертификатКлиентаWindows(вашсертификат.pem)

Еще уточните, пожалуйста:

  1. Версия платформы 1С?
  2. Код подключения к API выполняется на сервере 1C или на клиенте?

1. 8.3.7.2008

2. выполняется на сервере

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

А какой сервер (ОС / версия)?

Windows Server 2012 R2

Answer
Answered

Вот что удалось выяснить.


1. Документация 1С явно говорит о том, что сертификат клиента и сертификат удостоверяющего центра в простых случаях не требуются:

Создает защищенное соединение OpenSSL, использующего указанные источники клиентского сертификата и сертификатов удостоверяющих центров.
Если не указывается источник сертификатов удостоверяющих центров, то сертификат сервера не проверяется.
Если не указывается источник клиентского сертификата, то соединение возможно только с серверами, не требующими предоставления клиентского сертификата.

Это как раз наш случай: Дадата не требует клиентского сертификата.


2. Ваш код на моем тестовом сервере 1С работает без проблем.


3. Как вы пишете, у вас код тоже сначала работает, а ошибки начинают сыпаться через некоторое время.


В результате моя единственная гипотеза на сегодня — проблема в прокси-сервере или сетевых настройках, которые ваш сервер 1С использует для выхода в интернет. «Нечто» между сервером 1С и сервером Дадаты (ОС / прокси / маршрутизатор) через некоторое время перестает корректно обрабатывать исходящие соединения.


Как это можно проверить:

  1. Убедиться, что сервер 1С работает без использования прокси.
  2. Попробовать делать вызовы других сервисов, работающих через HTTPS (например, Яндекс), в течение длительного времени. Ошибка должна повториться.
  3. Попробовать работать с Дадатой по HTTP вместо HTTPS.

Спасибо большое, 2 и 3 не подходит. 1-й будем прорабатывать.