没有SSL时IOHandler之间的差异

Leg*_*nar 0 delphi ssl indy10 delphi-xe5

我正在使用Indy从URL地址获取JSON.我的代码是用TIdSSLIOHandlerSocketOpenSSL作为IOHandlerTIdHTTP.

var IdHTTP: TIdHTTP;
    IdSSL: TIdSSLIOHandlerSocketOpenSSL; // IO handler #1
    IdnoSSL: TIdIOHandlerStack;          // IO handler #2
    JSON: String;
Run Code Online (Sandbox Code Playgroud)

我很好奇,如果有一些理由使用SSL作为处理程序,当网址很简单时http://www.example.com,不是https://www.example.com吗?

begin
  IdHTTP := TIdHTTP.Create;

  try
    IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
    IdHTTP.IOHandler := IdSSL;

    // IdnoSSL:= TIdIOHandlerStack.Create(IdHTTP);
    // IdHTTP.IOHandler :=  IdnoSSL;

    JSON := IdHTTP.Get('http://www.example.com');
  finally
    IdHTTP.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

或者我应该删除TIdSSLIOHandlerSocketOpenSSL和使用noSSL TIdIOHandlerStack

任何帮助或建议都是适用的.

Rem*_*eau 6

如果您指定IdSSL,TIdHTTP将根据是否请求HTTP或HTTPS URL自动启用/禁用它.所以,你可以随便分配IdSSL,然后TIdHTTP决定如何使用它.

另一方面,如果您根本不需要HTTPS,则根本不需要分配任何内容IOHandler(您几乎不需要IdnoSSL).连接到服务器时,TIdIOHandlerStack如果IOHandler尚未分配,Indy将为您创建默认值.

如果您使用的是最新版本的Indy,并且不需要自定义SSL/TLS设置,则无需手动IOHandler为HTTPS 分配.

但是,如果您尝试在未IOHandler分配SSL的情况下(手动或其他方式)请求HTTPS URL ,则会出现EIdIOHandlerPropInvalid异常.