Delphi DLL
Delphi DLL
Bunny Sign URL and then Download using Signed URL
See more Bunny CDN Examples
Shows how to sign a URL for BunnyCDN Token Authentication and then use it to download.Chilkat Delphi DLL Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Http, StringBuilder, Url, CkDateTime;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
mySecurityKey: PWideChar;
url: PWideChar;
urlObj: HCkUrl;
url_scheme: PWideChar;
url_host: PWideChar;
url_path: PWideChar;
expTime: HCkDateTime;
expires: PWideChar;
sbToHash: HCkStringBuilder;
token: PWideChar;
sbSignedUrl: HCkStringBuilder;
signedUrl: PWideChar;
http: HCkHttp;
begin
success := False;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
mySecurityKey := 'e7ea8d73-8fa0-44ef-a2cc-91526f7df5ed';
url := 'https://test.b-cdn.net/sample-pdf-with-images.pdf';
// Extract the URL components.
urlObj := CkUrl_Create();
CkUrl_ParseUrl(urlObj,url);
url_scheme := 'https';
if (CkUrl_getSsl(urlObj) = False) then
begin
url_scheme := 'http';
end;
url_host := CkUrl__host(urlObj);
url_path := CkUrl__path(urlObj);
// Calculate an expiration time 1 hour from the current date/time.
expTime := CkDateTime_Create();
CkDateTime_SetFromCurrentSystemTime(expTime);
CkDateTime_AddSeconds(expTime,3600);
expires := CkDateTime__getAsUnixTimeStr(expTime,False);
Memo1.Lines.Add('Expires = ' + expires);
// Create the string to hash
sbToHash := CkStringBuilder_Create();
CkStringBuilder_Append(sbToHash,mySecurityKey);
CkStringBuilder_Append(sbToHash,url_path);
CkStringBuilder_Append(sbToHash,expires);
// Base64Url encoding is the same as base64, except "-" is used instead of "+",
// "_" is used instead of "/", and no "=" padding is added.
token := CkStringBuilder__getHash(sbToHash,'sha256','base64Url','utf-8');
sbSignedUrl := CkStringBuilder_Create();
CkStringBuilder_Append(sbSignedUrl,url_scheme);
CkStringBuilder_Append(sbSignedUrl,'://');
CkStringBuilder_Append(sbSignedUrl,url_host);
CkStringBuilder_Append(sbSignedUrl,url_path);
CkStringBuilder_Append(sbSignedUrl,'?token=');
CkStringBuilder_Append(sbSignedUrl,token);
CkStringBuilder_Append(sbSignedUrl,'&expires=');
CkStringBuilder_Append(sbSignedUrl,expires);
signedUrl := CkStringBuilder__getAsString(sbSignedUrl);
Memo1.Lines.Add('Signed URL: ' + signedUrl);
// Use the signed URL to download the file.
http := CkHttp_Create();
success := CkHttp_Download(http,signedUrl,'c:/aaworkarea/sample.pdf');
if (success = False) then
begin
Memo1.Lines.Add(CkHttp__lastErrorText(http));
end
else
begin
Memo1.Lines.Add('Success.');
end;
CkUrl_Dispose(urlObj);
CkDateTime_Dispose(expTime);
CkStringBuilder_Dispose(sbToHash);
CkStringBuilder_Dispose(sbSignedUrl);
CkHttp_Dispose(http);
end;