Sample code for 30+ languages & platforms
Tcl

Manually Follow HTTP Redirects

See more HTTP Examples

Demonstrates how to manually follow redirects for an HTTP GET.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

set http [new_CkHttp]

# The FollowRedirects property controls whether redirects
# are automatically followed.  The default behavior is to
# automatically follow redirects.

# Explicitly set FollowRedirects so that redirects are NOT automatically taken:
CkHttp_put_FollowRedirects $http 0

set resp [new_CkHttpResponse]

set success [CkHttp_HttpNoBody $http "GET" "http://yandex.ru/" $resp]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttp $http
    delete_CkHttpResponse $resp
    exit
}

set status [CkHttpResponse_get_StatusCode $resp]
puts "HTTP Response Status: $status"

# The FinalRedirectUrl property will contain the redirect URL
# If FollowRedirects was equal to 1, then all of the 
# intermediate redirects (if any) would be followed until
# there were no more redirects.  However, because 
# FollowRedirects is not 1, FinalRedirectUrl contains
# the next redirect URL.

set loopCount 0

while {$status == 302} {

    puts "Redirect URL: [CkHttp_finalRedirectUrl $http]"

    set nextUrl [CkHttp_finalRedirectUrl $http]
    set success [CkHttp_HttpNoBody $http "GET" $nextUrl $resp]
    if {$success == 0} then {
        puts [CkHttp_lastErrorText $http]
        delete_CkHttp $http
        delete_CkHttpResponse $resp
        exit
    }

    set status [CkHttpResponse_get_StatusCode $resp]
    puts "HTTP Response Status: $status"

    # For safety, prevent infinite loops by
    # keeping a loopCount and only allows following a max 
    # of 10 redirects:
    set loopCount [expr $loopCount + 1]
    if {$loopCount > 10} then {
        puts "Too many redirects."
        delete_CkHttp $http
        delete_CkHttpResponse $resp
        exit
    }

}

delete_CkHttp $http
delete_CkHttpResponse $resp