Я использую Delphi 7 с Indy 10.6.2.5459, чтобы время от времени отправлять POST-запрос к серверу:
sParams := '?ultimaAlteracao='+FormatDateTime('YYYY-MM-DD',now())+'T00:00:00.000';
FidHTTP := TIdHTTP.Create;
try
FidHTTP.Request.Clear;
FidHTTP.Request.Accept := 'application/json;charset=UTF-8';
FidHTTP.Request.CharSet := 'UTF-8';
FidHTTP.Response.ContentType := 'application/json;charset=UTF-8';
FidHTTP.Response.ContentEncoding := 'UTF-8';
FidHTTP.Request.CustomHeaders.AddValue('Authorization','Basic '+EncodeBase64('xx:xx@123456'));
JsonStream := TStringStream.Create('');
JsonStream.Position := 0;
try
FidHTTP.Get('https://'+server+'/LinxImportacaoArquivo/GetSelecaoDadosMDMNCM'+sParams, JsonStream);
DataString := JsonStream.DataString;
finally
FreeAndNil(JsonStream);
end;
finally
FreeAndNil(FidHTTP);
end;
Через некоторое время он начинает давать сбой и возвращает:
Ошибка создания контекста SSL. Ошибка: 140A90F1: SSL
подпрограммы: SSL_CTX_new: невозможно загрузить подпрограммы ssl2 md5
Если я перезапущу приложение, оно снова будет работать некоторое время.
Я нашел людей, у которых была такая же проблема: здесь и здесь
Из того, что я узнал, это может быть какой-то другой процесс, который использует Indy для создания запроса, который мешает, и я цитирую
Кажется, это проблема с некоторым типом статического члена
инициализация внутри библиотеки openssl. У меня есть 2 библиотеки, обе
они используют библиотеку openssl, давайте назовем их A и B. Когда
приложение запускается как A & B могут успешно создать
контекст безопасности. Позже, когда библиотека B пытается создать другую
контекст безопасности это не удается. И библиотека A, и B являются подключаемыми модулями
наше приложение, так что они оба будут загружаться, но если один не нужен, это
выгружен.
Действительно, в моем приложении выполняется множество других процессов, выполняющих http-запросы через indy10 или WinInet.
Итак, мой вопрос: есть ли какая-нибудь процедура, которую я могу вызвать на Indy10, чтобы она инициализировала что-то, что освободило ее в библиотеке opensll?