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

C++
#include <CkUrl.h>
#include <CkDateTime.h>
#include <CkStringBuilder.h>
#include <CkHttp.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 char *mySecurityKey = "e7ea8d73-8fa0-44ef-a2cc-91526f7df5ed";

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

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

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

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

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

    std::cout << "Expires = " << expires << "\r\n";

    // Create the string to hash
    CkStringBuilder 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 char *token = sbToHash.getHash("sha256","base64Url","utf-8");

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

    const char *signedUrl = sbSignedUrl.getAsString();
    std::cout << "Signed URL: " << signedUrl << "\r\n";

    // Use the signed URL to download the file.
    CkHttp http;
    success = http.Download(signedUrl,"c:/aaworkarea/sample.pdf");
    if (success == false) {
        std::cout << http.lastErrorText() << "\r\n";
    }
    else {
        std::cout << "Success." << "\r\n";
    }
    }