Tcl
Tcl
REST through SOCKS Proxy
See more REST Examples
Demonstrates how to connect through a SOCKS proxy to make REST API calls.Chilkat Tcl Downloads
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 a SOCKS proxy.
# It will connect to the Amazon AWS service for this example.
set rest [new_CkRest]
set socket [new_CkSocket]
# Set the SOCKS proxy domain or IP address, port, and SOCKS version number (4 or 5)
CkSocket_put_SocksHostname $socket "192.168.1.100"
CkSocket_put_SocksPort $socket 1080
CkSocket_put_SocksVersion $socket 5
# Other properties exist for specifying a SOCKS proxy login and password,
# 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