我正在使用 Indy 从 URL 地址获取 JSON。我的代码使用 TIdSSLIOHandlerSocketOpenSSL
作为 TIdHTTP
的 IOHandler
。
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
一起使用吗?
我们欢迎任何帮助或建议。
最佳答案
如果您分配 IdSSL
,TIdHTTP
将根据请求的是 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/