delphi - 没有 SSL 时 IOHandlers 之间的区别

标签 delphi ssl delphi-xe5 indy10

我正在使用 Indy 从 URL 地址获取 JSON。我的代码使用 TIdSSLIOHandlerSocketOpenSSL 作为 TIdHTTPIOHandler

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

我很好奇,如果有某种理由使用 SSL 作为处理程序,当 url 很简单时 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 一起使用吗?

我们欢迎任何帮助或建议。

最佳答案

如果您分配 IdSSLTIdHTTP 将根据请求的是 HTTP 还是 HTTPS url 自动启用/禁用它。因此,您可以始终分配 IdSSL,并让 TIdHTTP 决定如何使用它。

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

如果您使用的是最新版本的 Indy,并且不需要自定义 SSL/TLS 设置,那么 you don't need to manually assign an IOHandler for HTTPS .

但是,如果您尝试在没有分配 SSL IOHandler(手动或其他方式)的情况下请求 HTTPS url,您将收到 EIdIOHandlerPropInvalid 异常。

关于delphi - 没有 SSL 时 IOHandlers 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39605509/

相关文章:

delphi - 当我的 EXE 文件名包含单词 "update"时,如何避免 UAC?

Android sslpeerunverifiedexception 没有对等证书,JSON SSL

xml - 从函数返回 XML 文档

delphi - 如何调整为 WINx86 编写的代码以编译为 WINx64

android - Delphi 在 Android 上保存文本文件

sqlite - 为什么在 SQLite 中使用 TFDQuery 合并两个数据集后数字字段变成 TWideStringField

delphi - XE4 : How to change exe output name base on platform?

Delphi $Message 指令基于条件

Tomcat 重启错误 - BalancerFilter

asp.net-mvc-3 - 你如何在 Rackspace 云站点中使用 [RequireHttps]