【问题标题】:Delphi 2007 Indy 10 Cannot find SSL libraryDelphi 2007 Indy 10 找不到 SSL 库
【发布时间】:2015-10-27 11:45:14
【问题描述】:

我正在使用 Delphi 2007 和 Indy 10 发出 https 发布请求,我正在使用 httpbin 进行测试,但它不起作用......它正在提高:

First chance exception at $77503E28. Exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.'. Process Recarga.exe (21392)

这是我的代码:

unit UMAIN;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdHttp, IdMultipartFormData, IdSSLOpenSSL;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
const
  URL = 'https://httpbin.org/post';
var
  idHttp: TIdHTTP;
  data: TIdMultiPartFormDataStream;
  retorno: string;
  LHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  idHttp:= TIdHTTP.Create(nil);
  data := TIdMultiPartFormDataStream.Create;
  LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  with LHandler do
    begin
      SSLOptions.Method := sslvSSLv2;
      SSLOptions.Mode := sslmUnassigned;
      SSLOptions.VerifyMode := [];
      SSLOptions.VerifyDepth := 0;
      host := '';
    end;

  data.AddFormField('serv', 'atualizar');

  try
    try
      idHttp.IOHandler := LHandler;
      idHttp.Request.Accept := 'text/html, */*';
      idHttp.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0';
      idHttp.Request.ContentType := 'application/x-www-form-urlencoded';
      idHttp.HandleRedirects := True;
      retorno := UTF8Decode(idHttp.Post(URL, data));
      ShowMessage('Resultado: ' + retorno);
    except on E: Exception do
      ShowMessage('Erro: ' + E.Message);
    end;
  finally
    LHandler.Free;
    idHttp.Free;
  end;

end;

end.

我是在 SO 和其他需要 libeay32.dllssleay32.dll 库的网站上读到的,但我确实拥有它们,并且位于我的同一个目录中最终的 exe 文件,没有我上面说的那样有效。怎么了?这是一个错误吗?

【问题讨论】:

  • 做一些调试。找出为什么 DLL 没有加载。使用调试器。你有所有的代码。检查 LoadLibrary 失败时 GetLastError 返回的内容。
  • 您需要升级您的极有缺陷的极旧版本的 Indy。 Delphi 2007 附带的版本是不可接受的。
  • 感谢您的帮助,我会尽快更新。
  • 顺便说一句,为什么这个问题如此被否决? SO不应该用作有关编程的问题和答案的数据库吗?恕我直言,作为问答数据库,它应该包含尽可能多的问题,即使其中一些被认为是旧的;在未来的某一天,这些老问题可能会非常有用。我没有看到“旧东西”here。 Downvoting是一种特权,请谨慎使用。

标签: delphi ssl delphi-2007


【解决方案1】:

根据this 的回答,我必须先测试许多 dll,然后才能使用它们,我需要特定版本的 dll。经过努力和测试所有openssl版本provided by Indy9.6 one为我工作。

【讨论】:

  • 你使用的是过时的 Indy 和 OpenSSL 版本
  • 我认为未来没有人会在其中找到任何价值。为什么不删除呢?
  • 我正要建议。同意。
  • 仅供参考,当您在 Indy 中遇到 OpenSSL 加载失败时,您可以在 IdSSLOpenSSLHeaders 单元中调用 Indy 的 WhichFailedToLoad() 函数来找出加载失败的确切原因。由于 OpenSSL DLL 与 EXE 位于同一文件夹中,因此最可能的罪魁祸首是缺少 Indy 寻找并认为是“关键”的 OpenSSL 函数导出。 WhichFailedToLoad() 将报告缺少哪些导出(如果有)。
  • 当 Indy 需要特定的 dll 版本时,WhichFailedToLoad 没有帮助
猜你喜欢
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2017-02-15
相关资源
最近更新 更多