【问题标题】:Delphi 2007 and Indy 10 using https and SSLDelphi 2007 和 Indy 10 使用 https 和 SSL
【发布时间】:2012-10-28 09:47:23
【问题描述】:

我已经删除了一个 TIdHTTP 和一个 TIdSSLIOHandlerSocketOpenSSL,将 IdHTTP 的 IOHandler 设置为 SSL 处理程序,将 TIdSSLIOHandlerSocketOpenSSL 的模式设置为 sllmClient。然后在下面添加了按钮单击事件。我第一次从 WhichFailedToLoad 收到此错误。

显示,我第二次按下按钮就可以了。 ssl dll 位于 .exe 目录中。

该服务在浏览器中运行良好,并且正在生产中。为什么第一次就不行?

procedure TForm32.Button1Click(Sender: TObject);
var
  output : TMemoryStream;
begin
    output:=TMemoryStream.Create;
//    IdOpenSSLSetLibPath(
  try
    IdHTTP1.get('https://localhost:444/Folder/service.svc',output);
    output.position := 0;
    memo1.lines.LoadFromStream(output);
  except
    on exception do
    ShowMessage(WhichFailedToLoad());
  end;
end;

tia

【问题讨论】:

  • 我第一次从 WhichFailedToLoad 中得到这个错误。显示,我第二次按下它的按钮。为什么第一次就不行?更新了问题以使其更清晰
  • 我认为它显示了在加载 OpenSSL 库时找不到哪些导出的函数。检查您的 OpenSSL 库。如果它之后工作,那么您的代码可能没有使用任何丢失的导出,因此您也可以忽略这种情况下的异常。
  • hmm,我放了一个标志,所以它第一次执行额外的获取并吞噬了它抛出的异常 - 我仍然在第二次获取时收到消息,然后我进入睡眠状态(10 ) 在 2 次获取之间,消息消失了。有没有其他方法可以在不尝试连接的情况下加载 dll?
  • 您将 SSL DLL 放在哪里?在与可执行文件相同的文件夹中?
  • 是的。我检查了它们是 Delphi indy 的 - 我这里没有下载 - 这是我明天必须检查的东西。从网上查看 - 这是因为我使用了错误的 DLL,所以可能搜索路径错误,或者是版本问题。你还有什么可以建议我检查的吗?谢谢

标签: delphi indy


【解决方案1】:

您使用的一定是一个非常旧且过时的 Indy 10 版本 - 该消息框中报告的大多数函数都带有 _Indy 后缀。

Indy 9 及更早版本以及早期的 Indy 10 版本需要自定义构建的 OpenSSL DLL,这些 DLL 添加了 Indy 特定的函数来访问尚未在公共 OpenSSL API 中公开的内部 OpenSSL 数据。一旦这些数据在后来的 API 版本中公开,Indy 10 就被更新为不再需要定制构建的 DLL。它现在按原样使用标准化的 OpenSSL DLL。

因此,您要么需要追踪旧的定制 Indy OpenSSL DLL,要么需要升级到最新的 Indy 10 版本。

【讨论】:

  • 我担心这是问题所在,我将升级。谢谢。我尝试了一些较旧的 dll 但不同的问题。
【解决方案2】:

您应该更新到latest version of Indyssl dlls's,这应该完全消除异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多