Delphi 没有SSL时IOHandler之间的差异
我使用Indy从url地址获取JSON。我的代码正在使用Delphi 没有SSL时IOHandler之间的差异,delphi,ssl,delphi-xe5,indy10,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; 我很好奇,当url是简单的http
TIdSSLIOHandlerSocketOpenSSL
作为IOHandler
用于TIdHTTP
var IdHTTP: TIdHTTP;
IdSSL: TIdSSLIOHandlerSocketOpenSSL; // IO handler #1
IdnoSSL: TIdIOHandlerStack; // IO handler #2
JSON: String;
我很好奇,当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;
或者我应该删除tidsliohandlersocketopenssl
并将noSSL与TIdIOHandlerStack
一起使用吗
将通知任何帮助或建议。如果分配
IdSSL
,TIdHTTP
将根据请求的是HTTP还是HTTPS url自动启用/禁用它。因此,您可以始终分配IdSSL
,并让TIdHTTP
决定如何使用它
另一方面,如果您根本不需要HTTPS,那么实际上根本不需要分配任何IOHandler
(您几乎不需要IdnoSSL
)。连接到服务器时,如果尚未分配IOHandler
,Indy将为您创建默认的TIdIOHandlerStack
如果您使用的是最新版本的Indy,并且不需要自定义SSL/TLS设置,那么
但是,如果您试图请求HTTPS url而没有分配SSL
IOHandler
(手动或其他),您将获得EIdIOHandlerPropInvalid
异常。如果分配IdSSL
,TIdHTTP
将根据请求的是HTTP还是HTTPS url自动启用/禁用它。因此,您可以始终分配IdSSL
,并让TIdHTTP
决定如何使用它
另一方面,如果您根本不需要HTTPS,那么实际上根本不需要分配任何IOHandler
(您几乎不需要IdnoSSL
)。连接到服务器时,如果尚未分配IOHandler
,Indy将为您创建默认的TIdIOHandlerStack
如果您使用的是最新版本的Indy,并且不需要自定义SSL/TLS设置,那么
但是,如果您尝试请求HTTPS url而未分配SSL
IOHandler
(手动或其他方式),您将获得EIdIOHandlerPropInvalid
异常。谢谢。我试图分配noIOHandler
来访问HTTP,我还得到了eidiohandlerpinvalid
异常。所以我把IdSSL
放在那里了。嗯。。我在另一台没有安装Delphi的计算机上试用了它,结果发现异常eidosslcoldnotloadssllibrary
。所以我必须在我的应用程序中包含一些SSL库?谢谢您的帮助。@Legionar引发EIdIOHandlerPropInvalid
的唯一方法是在未分配SSLIOHandler
的情况下请求HTTPS url。您的HTTP url必须已将重定向发送回HTTPS url。是的,如果您使用的是TIdSSLIOHandlerSocketOpenSSL
,则您必须在应用程序中部署。谢谢。我试图分配noIOHandler
来访问HTTP,我还得到了eidiohandlerpinvalid
异常。所以我把IdSSL
放在那里了。嗯。。我在另一台没有安装Delphi的计算机上试用了它,结果发现异常eidosslcoldnotloadssllibrary
。所以我必须在我的应用程序中包含一些SSL库?谢谢您的帮助。@Legionar引发EIdIOHandlerPropInvalid
的唯一方法是在未分配SSLIOHandler
的情况下请求HTTPS url。您的HTTP url必须已将重定向发送回HTTPS url。是的,如果您使用的是TIdSSLIOHandlerSocketOpenSSL
,则必须随应用程序一起部署。