Go
Go
REST through SSH Tunnel
See more REST Examples
Demonstrates how to connect through an SSH Tunnel (via port-forwarding) to make REST API calls.Chilkat Go Downloads
success := false
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
tunnel := chilkat.NewSocket()
sshHostname := "sftp.example.com"
sshPort := 22
// Connect to an SSH server and establish the SSH tunnel:
success = tunnel.SshOpenTunnel(sshHostname,sshPort)
if success == false {
fmt.Println(tunnel.LastErrorText())
tunnel.DisposeSocket()
return
}
// Authenticate with the SSH server via a login/password
// or with a public key.
// This example demonstrates SSH password authentication.
success = tunnel.SshAuthenticatePw("mySshLogin","mySshPassword")
if success == false {
fmt.Println(tunnel.LastErrorText())
tunnel.DisposeSocket()
return
}
// OK, the SSH tunnel is setup. Now open a channel within the tunnel.
// (Any number of channels may be created from the same SSH tunnel.
// Multiple channels may coexist at the same time.)
// This example connects to a REST server through the SSH tunnel.
// It will connect to the Amazon AWS service for this example.
rest := chilkat.NewRest()
bTls := true
port := 443
maxWaitMs := 5000
// This returns a socket object that is a single channel within the SSH tunnel.
channel := chilkat.NewSocket()
success = tunnel.SshNewChannel("s3.amazonaws.com",port,bTls,maxWaitMs,channel)
if success == false {
fmt.Println(tunnel.LastErrorText())
tunnel.DisposeSocket()
rest.DisposeRest()
channel.DisposeSocket()
return
}
// Use the connection. (This connection is a TLS running on an SSH channel through an SSH tunnel.
// In other words, TLS is wrapped within the SSH tunnel.)
success = rest.UseConnection(channel,true)
if success != true {
fmt.Println(rest.LastErrorText())
tunnel.DisposeSocket()
rest.DisposeRest()
channel.DisposeSocket()
return
}
// Provide AWS credentials for the REST call.
authAws := chilkat.NewAuthAws()
authAws.SetAccessKey("AWS_ACCESS_KEY")
authAws.SetSecretKey("AWS_SECRET_KEY")
authAws.SetServiceName("s3")
success = rest.SetAuthAws(authAws)
// List all buckets for the account...
responseXml := rest.FullRequestNoBody("GET","/")
if rest.LastMethodSuccess() != true {
fmt.Println(rest.LastErrorText())
tunnel.DisposeSocket()
rest.DisposeRest()
channel.DisposeSocket()
authAws.DisposeAuthAws()
return
}
xml := chilkat.NewXml()
success = xml.LoadXml(*responseXml)
// Show the full XML returned.
fmt.Println(*xml.GetXml())
// Iterate over the buckets, showing each bucket name.
success = xml.FindChild2("Buckets")
if xml.FirstChild2() == true {
fmt.Println(*xml.GetChildContent("Name"))
for (xml.NextSibling2() == true) {
fmt.Println(*xml.GetChildContent("Name"))
}
}
// Move the internal pointer back to the root node.
xml.GetRoot2()
tunnel.DisposeSocket()
rest.DisposeRest()
channel.DisposeSocket()
authAws.DisposeAuthAws()
xml.DisposeXml()