【发布时间】:2011-01-15 16:48:28
【问题描述】:
我有以下任务:使用 HTTPS 和身份验证下载文件。 Indy 似乎是要走的路,但由于某种原因,它到目前为止还行不通。我有以下内容:
- 我用来下载的 TIdHTTP 组件
- 用于创建 URL 的 TIdURI 组件
- 应该提供安全连接的 TIdSSLIOHandlerSocketOpenSSL 组件。所需的 DLL 位于二进制文件夹中。
该站点还需要身份验证,我在 URL 中包含了用户/密码,如下例所示。简而言之,这是代码:
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 没有问题。关于缺少什么或我做错了什么的任何想法?
【问题讨论】:
-
应用程序和服务器之间是否有防火墙/代理? “浏览器正常工作”并不意味着有直接的互联网连接。
-
@mjustin 如果我查看浏览器设置,则没有定义代理。此外,WinInet 方法无需设置任何代理即可工作这一事实告诉我,这不是问题。
-
在这种情况下不要使用 TIdURI.Username/password 属性。您必须改用 TIdHTTP.Username/Password 属性。
标签: delphi openssl indy delphi-2006