我使用TidHTTP TIdSSLIOHandlerSocketOpenSSL 2 DLL:来自
http://indy.fulgan.com/SSL的ssleay32.dll和libeay32.dll.
但我可以在HTTP Analyzer中看到我的程序的所有工作!它可以用作HTTP,而不是HTTPS.如果我使用Opera,我看不到使用同一站点下载(https://esta.cbp.dhs.gov/esta).
我没有为TidHTTP和TIdSSLIOHandlerSocketOpenSSL设置任何特殊参数(可能是我必须但我不知道到底是什么).
我必须使用TIdSSLVersion(sslvSSLv23)SSL证书的位置吗?我在哪里可以获得此证书?还是只有RootCertFile?
如何将idHttp的端口更改为443(我必须这样做吗?)?
我用:
procedure TForm1.FormCreate(Sender: TObject); var mem:tmemorystream; begin try mem:=TMemoryStream.Create(); try idhttp1.Get('https://esta.cbp.dhs.gov/esta/',Mem); except on E : Exception do ShowMessage(E.Message); end; finally mem.Free; idhttp1.Free; end; end;
请看我的视频:http://liga-installer.realservers.info/ssl.mp4
截屏:
谢谢谢谢你的帮助!
解决方法
这个简单的示例适用于Delphi XE开箱即用,因此您无需在客户端更改端口或使用证书.它基于
an example from RosettaCode:
Uses IdHttp,IdSSLOpenSSL
…
procedure TForm2.Button1Click(Sender: TObject); var s: string; lHTTP: TIdHTTP; begin lHTTP := TIdHTTP.Create(nil); try lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP); lHTTP.HandleRedirects := True; s := lHTTP.Get('https://esta.cbp.dhs.gov/esta/'); RichEdit1.Text := s; finally lHTTP.Free; end; end;
问题可能是您需要部署的DLL的版本.由于最近的版本修复了安全问题,我建议将您的Indy版本升级到最新版本并使用fulgan网站上最新的OpenSSL库.
更新:您是说您无法使用网络浏览器查看网站,或者当您这样做时无法在HTTP分析器中看到流量?正如Rob提到的,如果使用常规Web浏览器看不到该站点,那么问题可能不是您的应用程序.