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