C
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 C Downloads
#include <C_CkUrl.h>
#include <C_CkDateTime.h>
#include <C_CkStringBuilder.h>
#include <C_CkHttp.h>
void ChilkatSample(void)
{
BOOL success;
const char *mySecurityKey;
const char *url;
HCkUrl urlObj;
const char *url_scheme;
const char *url_host;
const char *url_path;
HCkDateTime expTime;
const char *expires;
HCkStringBuilder sbToHash;
const char *token;
HCkStringBuilder sbSignedUrl;
const char *signedUrl;
HCkHttp http;
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) {
url_scheme = "http";
}
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);
printf("Expires = %s\n",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);
printf("Signed URL: %s\n",signedUrl);
// Use the signed URL to download the file.
http = CkHttp_Create();
success = CkHttp_Download(http,signedUrl,"c:/aaworkarea/sample.pdf");
if (success == FALSE) {
printf("%s\n",CkHttp_lastErrorText(http));
}
else {
printf("Success.\n");
}
CkUrl_Dispose(urlObj);
CkDateTime_Dispose(expTime);
CkStringBuilder_Dispose(sbToHash);
CkStringBuilder_Dispose(sbSignedUrl);
CkHttp_Dispose(http);
}