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 <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);

    }