Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 没有SSL时IOHandler之间的差异_Delphi_Ssl_Delphi Xe5_Indy10 - Fatal编程技术网

Delphi 没有SSL时IOHandler之间的差异

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

我使用Indy从url地址获取JSON。我的代码正在使用
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
异常。

谢谢。我试图分配no
IOHandler
来访问HTTP,我还得到了
eidiohandlerpinvalid
异常。所以我把
IdSSL
放在那里了。嗯。。我在另一台没有安装Delphi的计算机上试用了它,结果发现异常
eidosslcoldnotloadssllibrary
。所以我必须在我的应用程序中包含一些SSL库?谢谢您的帮助。@Legionar引发
EIdIOHandlerPropInvalid
的唯一方法是在未分配
SSLIOHandler
的情况下请求HTTPS url。您的HTTP url必须已将重定向发送回HTTPS url。是的,如果您使用的是
TIdSSLIOHandlerSocketOpenSSL
,则您必须在应用程序中部署。谢谢。我试图分配no
IOHandler
来访问HTTP,我还得到了
eidiohandlerpinvalid
异常。所以我把
IdSSL
放在那里了。嗯。。我在另一台没有安装Delphi的计算机上试用了它,结果发现异常
eidosslcoldnotloadssllibrary
。所以我必须在我的应用程序中包含一些SSL库?谢谢您的帮助。@Legionar引发
EIdIOHandlerPropInvalid
的唯一方法是在未分配
SSLIOHandler
的情况下请求HTTPS url。您的HTTP url必须已将重定向发送回HTTPS url。是的,如果您使用的是
TIdSSLIOHandlerSocketOpenSSL
,则必须随应用程序一起部署。