我有以下任务:使用HTTPS和身份验证下载文件。 Indy似乎要走,但由于某种原因,它迄今为止并不奏效。我在地方执行以下操作:如何使用Indy 10和OpenSSL通过HTTPS下载文件?
- 我使用下载
- 用于创建URL
- 一个TIdSSLIOHandlerSocketOpenSSL组件,它应该提供安全连接TIdURI分量TIdHTTP组件。所需的DLL位于二进制文件夹中。
该网站还要求身份验证,并且我在下面的示例中包含了用户名/密码。总之这是代码:
URI := TIdURI.Create('https://test.example.com/');
URI.Username := ParamUserName;
URI.Password := ParamPassword;
HTTP := TIdHTTP.Create(nil);
if URI.Protocol = 'https' then
begin
IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
IOHandler.SSLOptions.Method := sslvSSLv3;
HTTP.IOHandler := IOHandler;
end;
HTTP.Get(URI.GetFullURI([ofAuthInfo]), FileStream);
使用这个代码,我得到一个“读超时” EIdReadTimeout例外非常快。在浏览器中测试URL是毫无问题的。任何想法什么是缺失或我做错了什么?
在应用程序和服务器之间是否存在防火墙/代理? '浏览器作品'并不意味着有直接的互联网连接。 – mjn 2010-02-11 14:16:43
@mjustin如果我查看浏览器设置,则没有定义代理。另外,WinInet方法在没有设置任何代理的情况下工作的事实告诉我,这不是问题。 – Tihauan 2010-02-12 08:31:24
在这种情况下,请勿使用TIdURI.Username/password属性。您必须改用TIdHTTP.Username/Password属性。 – 2010-02-12 10:17:38