DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoTunnel
String sSshHostname
Integer iSshPort
Handle hoRest
Boolean iBTls
Integer iPort
Integer iMaxWaitMs
Variant vChannel
Handle hoChannel
Variant vAuthAws
Handle hoAuthAws
String sResponseXml
Handle hoXml
String sTemp1
Boolean bTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatSocket)) To hoTunnel
If (Not(IsComObjectCreated(hoTunnel))) Begin
Send CreateComObject of hoTunnel
End
Move "sftp.example.com" To sSshHostname
Move 22 To iSshPort
// Connect to an SSH server and establish the SSH tunnel:
Get ComSshOpenTunnel Of hoTunnel sSshHostname iSshPort To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoTunnel To sTemp1
Showln sTemp1
Procedure_Return
End
// Authenticate with the SSH server via a login/password
// or with a public key.
// This example demonstrates SSH password authentication.
Get ComSshAuthenticatePw Of hoTunnel "mySshLogin" "mySshPassword" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoTunnel To sTemp1
Showln sTemp1
Procedure_Return
End
// 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.
Get Create (RefClass(cComChilkatRest)) To hoRest
If (Not(IsComObjectCreated(hoRest))) Begin
Send CreateComObject of hoRest
End
Move True To iBTls
Move 443 To iPort
Move 5000 To iMaxWaitMs
// This returns a socket object that is a single channel within the SSH tunnel.
Get Create (RefClass(cComChilkatSocket)) To hoChannel
If (Not(IsComObjectCreated(hoChannel))) Begin
Send CreateComObject of hoChannel
End
Get pvComObject of hoChannel to vChannel
Get ComSshNewChannel Of hoTunnel "s3.amazonaws.com" iPort iBTls iMaxWaitMs vChannel To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoTunnel To sTemp1
Showln sTemp1
Procedure_Return
End
// 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.)
Get pvComObject of hoChannel to vChannel
Get ComUseConnection Of hoRest vChannel True To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
// Provide AWS credentials for the REST call.
Get Create (RefClass(cComChilkatAuthAws)) To hoAuthAws
If (Not(IsComObjectCreated(hoAuthAws))) Begin
Send CreateComObject of hoAuthAws
End
Set ComAccessKey Of hoAuthAws To "AWS_ACCESS_KEY"
Set ComSecretKey Of hoAuthAws To "AWS_SECRET_KEY"
Set ComServiceName Of hoAuthAws To "s3"
Get pvComObject of hoAuthAws to vAuthAws
Get ComSetAuthAws Of hoRest vAuthAws To iSuccess
// List all buckets for the account...
Get ComFullRequestNoBody Of hoRest "GET" "/" To sResponseXml
Get ComLastMethodSuccess Of hoRest To bTemp1
If (bTemp1 <> True) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatXml)) To hoXml
If (Not(IsComObjectCreated(hoXml))) Begin
Send CreateComObject of hoXml
End
Get ComLoadXml Of hoXml sResponseXml To iSuccess
// Show the full XML returned.
Get ComGetXml Of hoXml To sTemp1
Showln sTemp1
// Iterate over the buckets, showing each bucket name.
Get ComFindChild2 Of hoXml "Buckets" To iSuccess
Get ComFirstChild2 Of hoXml To bTemp1
If (bTemp1 = True) Begin
Get ComGetChildContent Of hoXml "Name" To sTemp1
Showln sTemp1
While ((ComNextSibling2(hoXml)) = True)
Get ComGetChildContent Of hoXml "Name" To sTemp1
Showln sTemp1
Loop
End
// Move the internal pointer back to the root node.
Send ComGetRoot2 To hoXml
End_Procedure