訪問一個 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;