访问一个 WEB 网站,如果采用 HTTP 的话,直接使用 TIdHTTP 这个控件,最简单的用法是:
S := IdHTTP1.Get('http://www.baidu.com');
这里返回的 S 就是对应的网页的文本内容。
如果要访问 https 的网站,则需要 SSL 库。在 Windows 底下,去 https://indy.fulgan.com/SSL/ 下载最新的 SSL 的库。下载后,解压缩,包括两个 dll 文件:ssleay32.dll 和 libeay32.dll;直接放到你的程序编译好的 EXE 相同文件夹底下就可以了。
运行期你的程序会自动加载这两个 DLL 完成 SSL 的功能。
设计期,拖一个 TIdSSLIOHandlerSocketOpenSSL 过来,然后设置 IdHTTP1 的属性:
1. IOHandler 这个属性,下拉,选择 IdSSLIOHandlerSocketOpenSSL1;
2. HandleRedirects 属性:设置为 True;默认是 False;
另外,要注意设置一下 IdSSLIOHandlerSocketOpenSSL1 的属性:SSLOptions -> Method 这个属性,设置为:sslvTLSv1_1
然后采用这行代码就搞定:S := IdHTTP1.Get('https://www.baidu.com');
下面是一个用HTTP/HTTPS下载文件的例子,希望对大家有用:
function TForm1.DownloadFile(aurl: string; destfile: string): string;
var
MemoryStream: TMemoryStream;
URL, SavePath, sFileName,sFileType: string;
DMHttp: TIdHTTP;
begin
Result := '';
if aurl = '' then Exit;
URL := '';
SavePath := '';
sFileName := '';
sFileType := '';
try
MemoryStream := TMemoryStream.Create;
DMHttp := TIdHttp.Create(nil);
URL :=aurl;
Screen.Cursor := crHourGlass;
if aurl.StartsWith('https') then
begin
DMHttp.IOHandler := idSSLIOHandlerSocketOpenSSL1;
DMHttp.HandleRedirects := True;
end;
try
DMHttp.Get(URL, MemoryStream);
MemoryStream.Position := 0;
sFileName := DMHttp.Response.RawHeaders.Values['Content-Disposition'];
Delete(sFileName, 1, Pos('filename=', sFileName) + Length('filename=') - 1);
if destfile.Contains('\\') then
begin
SavePath := destFile;
end
else
begin
SavePath := ExtractFilePath(Application.ExeName) + '\\' + destfile;
end;
MemoryStream.SaveToFile(SavePath);
Result := SavePath;
except
end;
finally
FreeAndNil(MemoryStream);
FreeAndNil(DMHttp);
Screen.Cursor := crDefault;
end;
end;