Leg*_*nar 0 delphi ssl indy10 delphi-xe5
我正在使用Indy从URL地址获取JSON.我的代码是用TIdSSLIOHandlerSocketOpenSSL作为IOHandler对TIdHTTP.
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?
任何帮助或建议都是适用的.
如果您指定IdSSL,TIdHTTP将根据是否请求HTTP或HTTPS URL自动启用/禁用它.所以,你可以随便分配IdSSL,然后TIdHTTP决定如何使用它.
另一方面,如果您根本不需要HTTPS,则根本不需要分配任何内容IOHandler(您几乎不需要IdnoSSL).连接到服务器时,TIdIOHandlerStack如果IOHandler尚未分配,Indy将为您创建默认值.
如果您使用的是最新版本的Indy,并且不需要自定义SSL/TLS设置,则无需手动IOHandler为HTTPS 分配.
但是,如果您尝试在未IOHandler分配SSL的情况下(手动或其他方式)请求HTTPS URL ,则会出现EIdIOHandlerPropInvalid异常.