Sample code for 30+ languages & platforms
Tcl

REST through HTTP Proxy

See more REST Examples

Demonstrates how to connect through an HTTP proxy to make REST API calls.

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.

# This example connects to a REST server through an HTTP proxy.
# It will connect to the Amazon AWS service for this example.
set rest [new_CkRest]

set socket [new_CkSocket]

# Set the HTTP proxy domain or IP address, and port.
CkSocket_put_HttpProxyHostname $socket "192.168.1.100"
CkSocket_put_HttpProxyPort $socket 8088

# We want to tell the socket object that we're doing HTTP over the proxy connection.
# This is because an HTTP proxy used for other protocols (IMAP, SMTP, SSH, FTP, etc.) 
# can require some internal differences in behavior (i.e. how we do things).
CkSocket_put_HttpProxyForHttp $socket 1

# Other properties exist for specifying a proxy login, password, and authentication method (such as NTLM),
# but these are not used in this example.

# Connect through the HTTP proxy to the Amazon AWS server for the S3 service.
set bTls 1
set port 443
set maxWaitMs 5000
set success [CkSocket_Connect $socket "s3.amazonaws.com" $port $bTls $maxWaitMs]
if {$success != 1} then {
    puts "Connect Failure Error Code: [CkSocket_get_ConnectFailReason $socket]"
    puts [CkSocket_lastErrorText $socket]
    delete_CkRest $rest
    delete_CkSocket $socket
    exit
}

# Use the proxied TLS connection:
set success [CkRest_UseConnection $rest $socket 1]
if {$success != 1} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkRest $rest
    delete_CkSocket $socket
    exit
}

# Provide AWS credentials for the REST call.
set authAws [new_CkAuthAws]

CkAuthAws_put_AccessKey $authAws "AWS_ACCESS_KEY"
CkAuthAws_put_SecretKey $authAws "AWS_SECRET_KEY"
CkAuthAws_put_ServiceName $authAws "s3"
set success [CkRest_SetAuthAws $rest $authAws]

# List all buckets for the account...
set responseXml [CkRest_fullRequestNoBody $rest "GET" "/"]
if {[CkRest_get_LastMethodSuccess $rest] != 1} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkRest $rest
    delete_CkSocket $socket
    delete_CkAuthAws $authAws
    exit
}

set xml [new_CkXml]

set success [CkXml_LoadXml $xml $responseXml]

# Show the full XML returned.
puts [CkXml_getXml $xml]

# Iterate over the buckets, showing each bucket name.
set success [CkXml_FindChild2 $xml "Buckets"]
if {[CkXml_FirstChild2 $xml] == 1} then {
    puts [CkXml_getChildContent $xml Name]
    while {[CkXml_NextSibling2 $xml] == 1} {
        puts [CkXml_getChildContent $xml Name]
    }
}

# Move the internal pointer back to the root node.
CkXml_GetRoot2 $xml

delete_CkRest $rest
delete_CkSocket $socket
delete_CkAuthAws $authAws
delete_CkXml $xml