Sample code for 30+ languages & platforms
Tcl

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 Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

set mySecurityKey "e7ea8d73-8fa0-44ef-a2cc-91526f7df5ed"

set url "https://test.b-cdn.net/sample-pdf-with-images.pdf"

# Extract the URL components.
set urlObj [new_CkUrl]

CkUrl_ParseUrl $urlObj $url

set url_scheme "https"
if {[CkUrl_get_Ssl $urlObj] == 0} then {
    set url_scheme "http"
}

set url_host [CkUrl_host $urlObj]
set url_path [CkUrl_path $urlObj]

# Calculate an expiration time 1 hour from the current date/time.
set expTime [new_CkDateTime]

CkDateTime_SetFromCurrentSystemTime $expTime
CkDateTime_AddSeconds $expTime 3600
set expires [CkDateTime_getAsUnixTimeStr $expTime 0]

puts "Expires = $expires"

# Create the string to hash
set sbToHash [new_CkStringBuilder]

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.
set token [CkStringBuilder_getHash $sbToHash "sha256" "base64Url" "utf-8"]

set sbSignedUrl [new_CkStringBuilder]

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

set signedUrl [CkStringBuilder_getAsString $sbSignedUrl]
puts "Signed URL: $signedUrl"

# Use the signed URL to download the file.
set http [new_CkHttp]

set success [CkHttp_Download $http $signedUrl "c:/aaworkarea/sample.pdf"]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
} else {
    puts "Success."
}


delete_CkUrl $urlObj
delete_CkDateTime $expTime
delete_CkStringBuilder $sbToHash
delete_CkStringBuilder $sbSignedUrl
delete_CkHttp $http