Sample code for 30+ languages & platforms
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

Unicode C++
#include <CkUrlW.h>
#include <CkDateTimeW.h>
#include <CkStringBuilderW.h>
#include <CkHttpW.h>

void ChilkatSample(void)
    {
    bool success = false;

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    const wchar_t *mySecurityKey = L"e7ea8d73-8fa0-44ef-a2cc-91526f7df5ed";

    const wchar_t *url = L"https://test.b-cdn.net/sample-pdf-with-images.pdf";

    // Extract the URL components.
    CkUrlW urlObj;
    urlObj.ParseUrl(url);

    const wchar_t *url_scheme = L"https";
    if (urlObj.get_Ssl() == false) {
        url_scheme = L"http";
    }

    const wchar_t *url_host = urlObj.host();
    const wchar_t *url_path = urlObj.path();

    // Calculate an expiration time 1 hour from the current date/time.
    CkDateTimeW expTime;
    expTime.SetFromCurrentSystemTime();
    expTime.AddSeconds(3600);
    const wchar_t *expires = expTime.getAsUnixTimeStr(false);

    wprintf(L"Expires = %s\n",expires);

    // Create the string to hash
    CkStringBuilderW sbToHash;
    sbToHash.Append(mySecurityKey);
    sbToHash.Append(url_path);
    sbToHash.Append(expires);

    // Base64Url encoding is the same as base64, except "-" is used instead of "+",
    // "_" is used instead of "/", and no "=" padding is added.
    const wchar_t *token = sbToHash.getHash(L"sha256",L"base64Url",L"utf-8");

    CkStringBuilderW sbSignedUrl;
    sbSignedUrl.Append(url_scheme);
    sbSignedUrl.Append(L"://");
    sbSignedUrl.Append(url_host);
    sbSignedUrl.Append(url_path);
    sbSignedUrl.Append(L"?token=");
    sbSignedUrl.Append(token);
    sbSignedUrl.Append(L"&expires=");
    sbSignedUrl.Append(expires);

    const wchar_t *signedUrl = sbSignedUrl.getAsString();
    wprintf(L"Signed URL: %s\n",signedUrl);

    // Use the signed URL to download the file.
    CkHttpW http;
    success = http.Download(signedUrl,L"c:/aaworkarea/sample.pdf");
    if (success == false) {
        wprintf(L"%s\n",http.lastErrorText());
    }
    else {
        wprintf(L"Success.\n");
    }
    }