Unicode C
Unicode C
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 Unicode C Downloads
#include <C_CkUrlW.h>
#include <C_CkDateTimeW.h>
#include <C_CkStringBuilderW.h>
#include <C_CkHttpW.h>
void ChilkatSample(void)
{
BOOL success;
const wchar_t *mySecurityKey;
const wchar_t *url;
HCkUrlW urlObj;
const wchar_t *url_scheme;
const wchar_t *url_host;
const wchar_t *url_path;
HCkDateTimeW expTime;
const wchar_t *expires;
HCkStringBuilderW sbToHash;
const wchar_t *token;
HCkStringBuilderW sbSignedUrl;
const wchar_t *signedUrl;
HCkHttpW http;
success = FALSE;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
mySecurityKey = L"e7ea8d73-8fa0-44ef-a2cc-91526f7df5ed";
url = L"https://test.b-cdn.net/sample-pdf-with-images.pdf";
// Extract the URL components.
urlObj = CkUrlW_Create();
CkUrlW_ParseUrl(urlObj,url);
url_scheme = L"https";
if (CkUrlW_getSsl(urlObj) == FALSE) {
url_scheme = L"http";
}
url_host = CkUrlW_host(urlObj);
url_path = CkUrlW_path(urlObj);
// Calculate an expiration time 1 hour from the current date/time.
expTime = CkDateTimeW_Create();
CkDateTimeW_SetFromCurrentSystemTime(expTime);
CkDateTimeW_AddSeconds(expTime,3600);
expires = CkDateTimeW_getAsUnixTimeStr(expTime,FALSE);
wprintf(L"Expires = %s\n",expires);
// Create the string to hash
sbToHash = CkStringBuilderW_Create();
CkStringBuilderW_Append(sbToHash,mySecurityKey);
CkStringBuilderW_Append(sbToHash,url_path);
CkStringBuilderW_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 = CkStringBuilderW_getHash(sbToHash,L"sha256",L"base64Url",L"utf-8");
sbSignedUrl = CkStringBuilderW_Create();
CkStringBuilderW_Append(sbSignedUrl,url_scheme);
CkStringBuilderW_Append(sbSignedUrl,L"://");
CkStringBuilderW_Append(sbSignedUrl,url_host);
CkStringBuilderW_Append(sbSignedUrl,url_path);
CkStringBuilderW_Append(sbSignedUrl,L"?token=");
CkStringBuilderW_Append(sbSignedUrl,token);
CkStringBuilderW_Append(sbSignedUrl,L"&expires=");
CkStringBuilderW_Append(sbSignedUrl,expires);
signedUrl = CkStringBuilderW_getAsString(sbSignedUrl);
wprintf(L"Signed URL: %s\n",signedUrl);
// Use the signed URL to download the file.
http = CkHttpW_Create();
success = CkHttpW_Download(http,signedUrl,L"c:/aaworkarea/sample.pdf");
if (success == FALSE) {
wprintf(L"%s\n",CkHttpW_lastErrorText(http));
}
else {
wprintf(L"Success.\n");
}
CkUrlW_Dispose(urlObj);
CkDateTimeW_Dispose(expTime);
CkStringBuilderW_Dispose(sbToHash);
CkStringBuilderW_Dispose(sbSignedUrl);
CkHttpW_Dispose(http);
}