没有SSL时IOHandler之间的差异

时间:2016-09-20 23:59:50

标签: delphi ssl delphi-xe5 indy10

我正在使用Indy从url地址获取JSON。我的代码使用TIdSSLIOHandlerSocketOpenSSL作为IOHandler TIdHTTP

var IdHTTP: TIdHTTP;
    IdSSL: TIdSSLIOHandlerSocketOpenSSL; // IO handler #1
    IdnoSSL: TIdIOHandlerStack;          // IO handler #2
    JSON: String;

我很好奇,如果有理由使用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;

或者我应该删除TIdSSLIOHandlerSocketOpenSSL并将noSSL与TIdIOHandlerStack一起使用?

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

1 个答案:

答案 0 :(得分:6)

如果您指定 FacebookSdk.sdkInitialize(getApplicationContext()); AppEventsLogger.activateApp(this); setContentView(R.layout.activity_main); IdSSL将根据是否请求HTTP或HTTPS网址自动启用/禁用它。因此,您可以随时分配TIdHTTP,让IdSSL决定如何使用它。

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

如果您使用的是Indy的最新版本,并且不需要自定义SSL / TLS设置,那么here

但是,如果您尝试申请未分配SSL IOHandler的HTTPS网址(手动或其他方式),您将获得IOHandler例外。