Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) REST through SSH TunnelDemonstrates how to connect through an SSH Tunnel (via port-forwarding) to make REST API calls.
IncludeFile "CkSocket.pb" IncludeFile "CkXml.pb" IncludeFile "CkRest.pb" IncludeFile "CkAuthAws.pb" Procedure ChilkatExample() ; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. tunnel.i = CkSocket::ckCreate() If tunnel.i = 0 Debug "Failed to create object." ProcedureReturn EndIf sshHostname.s = "sftp.example.com" sshPort.i = 22 ; Connect to an SSH server and establish the SSH tunnel: success.i = CkSocket::ckSshOpenTunnel(tunnel,sshHostname,sshPort) If success <> 1 Debug CkSocket::ckLastErrorText(tunnel) CkSocket::ckDispose(tunnel) ProcedureReturn EndIf ; Authenticate with the SSH server via a login/password ; or with a public key. ; This example demonstrates SSH password authentication. success = CkSocket::ckSshAuthenticatePw(tunnel,"mySshLogin","mySshPassword") If success <> 1 Debug CkSocket::ckLastErrorText(tunnel) CkSocket::ckDispose(tunnel) ProcedureReturn EndIf ; 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.i = CkRest::ckCreate() If rest.i = 0 Debug "Failed to create object." ProcedureReturn EndIf channel.i bTls.i = 1 port.i = 443 maxWaitMs.i = 5000 ; This returns a socket object that is a single channel within the SSH tunnel. channel = CkSocket::ckSshOpenChannel(tunnel,"s3.amazonaws.com",port,bTls,maxWaitMs) If CkSocket::ckLastMethodSuccess(tunnel) <> 1 Debug CkSocket::ckLastErrorText(tunnel) CkSocket::ckDispose(tunnel) CkRest::ckDispose(rest) ProcedureReturn EndIf ; 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 = CkRest::ckUseConnection(rest,channel,1) If success <> 1 Debug CkRest::ckLastErrorText(rest) CkSocket::ckDispose(channel) CkSocket::ckDispose(tunnel) CkRest::ckDispose(rest) ProcedureReturn EndIf ; Provide AWS credentials for the REST call. authAws.i = CkAuthAws::ckCreate() If authAws.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY") CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY") CkAuthAws::setCkServiceName(authAws, "s3") success = CkRest::ckSetAuthAws(rest,authAws) ; List all buckets for the account... responseXml.s = CkRest::ckFullRequestNoBody(rest,"GET","/") If CkRest::ckLastMethodSuccess(rest) <> 1 Debug CkRest::ckLastErrorText(rest) CkSocket::ckDispose(channel) CkSocket::ckDispose(tunnel) CkRest::ckDispose(rest) CkAuthAws::ckDispose(authAws) ProcedureReturn EndIf xml.i = CkXml::ckCreate() If xml.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkXml::ckLoadXml(xml,responseXml) ; Show the full XML returned. Debug CkXml::ckGetXml(xml) ; Iterate over the buckets, showing each bucket name. success = CkXml::ckFindChild2(xml,"Buckets") If CkXml::ckFirstChild2(xml) = 1 Debug CkXml::ckGetChildContent(xml,"Name") While (CkXml::ckNextSibling2(xml) = 1) Debug CkXml::ckGetChildContent(xml,"Name") Wend EndIf ; Move the internal pointer back to the root node. CkXml::ckGetRoot2(xml) CkSocket::ckDispose(channel) CkSocket::ckDispose(tunnel) CkRest::ckDispose(rest) CkAuthAws::ckDispose(authAws) CkXml::ckDispose(xml) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.