我正在使用Indy从url地址获取JSON。我的代码使用TIdSSLIOHandlerSocketOpenSSL
作为IOHandler
TIdHTTP
。
var IdHTTP: TIdHTTP;
IdSSL: TIdSSLIOHandlerSocketOpenSSL; // IO handler #1
IdnoSSL: TIdIOHandlerStack; // IO handler #2
JSON: String;
我很好奇,如果有理由使用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;
或者我应该删除TIdSSLIOHandlerSocketOpenSSL
并将noSSL与TIdIOHandlerStack
一起使用?
任何帮助或建议都是适用的。
答案 0 :(得分:6)
如果您指定 FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(this);
setContentView(R.layout.activity_main);
,IdSSL
将根据是否请求HTTP或HTTPS网址自动启用/禁用它。因此,您可以随时分配TIdHTTP
,让IdSSL
决定如何使用它。
另一方面,如果您根本不需要HTTPS,则根本不需要分配任何TIdHTTP
(您几乎不需要IOHandler
)。连接到服务器时,如果尚未分配IdnoSSL
,Indy将为您创建默认TIdIOHandlerStack
。
如果您使用的是Indy的最新版本,并且不需要自定义SSL / TLS设置,那么here。
但是,如果您尝试申请未分配SSL IOHandler
的HTTPS网址(手动或其他方式),您将获得IOHandler
例外。