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
(DataFlex) Xero API through an SOCKS ProxyThis example demonstrates connecting through a SOCKS proxy w/ 2-legged OAuth for a Xero private application. This example requires Chilkat v9.5.0.64 or later
Use ChilkatAx-9.5.0-win32.pkg Procedure Test Handle hoRest Variant vSocket Handle hoSocket Boolean iBTls Integer iPort Integer iMaxWaitMs Boolean iSuccess String sConsumerKey String sConsumerSecret Handle hoPfx Variant vPrivKeyFromPfx Handle hoPrivKeyFromPfx Handle hoPrivKeyFromPem Variant vOauth1 Handle hoOauth1 Variant vSbXml Handle hoSbXml Boolean iBAutoTrim Handle hoXml Integer iRecordCount Integer i String sTemp1 Integer iTemp1 Boolean bTemp1 // This example requires Chilkat v9.5.0.64 or later // This sample code would typically be placed in a subroutine or function // where the rest object is passed by reference. // It does the OAuth1 setup and makes the initial connection. Get Create (RefClass(cComChilkatRest)) To hoRest If (Not(IsComObjectCreated(hoRest))) Begin Send CreateComObject of hoRest End // Connect to the Xero server through an HTTP proxy, and then tell the REST object // to use the socket connection. Get Create (RefClass(cComChilkatSocket)) To hoSocket If (Not(IsComObjectCreated(hoSocket))) Begin Send CreateComObject of hoSocket End // Set the SOCKS proxy domain or IP address, port, and SOCKS version number (4 or 5) Set ComSocksHostname Of hoSocket To "192.168.1.100" Set ComSocksPort Of hoSocket To 1080 Set ComSocksVersion Of hoSocket To 5 // Other properties exist for specifying a SOCKS proxy login and password, // but these are not used in this example. // Connect through the SOCKS proxy.. Move True To iBTls Move 443 To iPort Move 5000 To iMaxWaitMs Get ComConnect Of hoSocket "api.xero.com" iPort iBTls iMaxWaitMs To iSuccess If (iSuccess <> True) Begin Get ComConnectFailReason Of hoSocket To iTemp1 Showln "Connect Failure Error Code: " iTemp1 Get ComLastErrorText Of hoSocket To sTemp1 Showln sTemp1 Procedure_Return End // Use the SOCKS proxied TLS connection: Get pvComObject of hoSocket to vSocket Get ComUseConnection Of hoRest vSocket True To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoRest To sTemp1 Showln sTemp1 Procedure_Return End // OK, we're connected. // The UseConnection method has an internal reference to the underlying/internal socket. // The application can does not need to keep its socket object in existence. // ----------------------------------------------------------------- // Now setup the OAuth1 authenticator.. Move "XERO_PRIVATE_APP_KEY" To sConsumerKey Move "XERO_PRIVATE_APP_SECRET" To sConsumerSecret // Let's get our private key from our PFX (password protected), or the PEM (unprotected). // You can decide which to use. Either is OK, although I would recommend keeping your // private keys in a PFX and not in an unprotected PEM. Get Create (RefClass(cComChilkatPfx)) To hoPfx If (Not(IsComObjectCreated(hoPfx))) Begin Send CreateComObject of hoPfx End Get ComLoadPfxFile Of hoPfx "qa_data/certs/xero_private_app/public_privatekey.pfx" "PFX_PASSWORD" To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoPfx To sTemp1 Showln sTemp1 Procedure_Return End Get ComGetPrivateKey Of hoPfx 0 To vPrivKeyFromPfx If (IsComObject(vPrivKeyFromPfx)) Begin Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKeyFromPfx Set pvComObject Of hoPrivKeyFromPfx To vPrivKeyFromPfx End Get ComLastMethodSuccess Of hoPfx To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoPfx To sTemp1 Showln sTemp1 Procedure_Return End // Or we can load from a PEM.. Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKeyFromPem If (Not(IsComObjectCreated(hoPrivKeyFromPem))) Begin Send CreateComObject of hoPrivKeyFromPem End Get ComLoadPemFile Of hoPrivKeyFromPem "qa_data/certs/xero_private_app/privatekey.pem" To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoPrivKeyFromPem To sTemp1 Showln sTemp1 Procedure_Return End // Note: There are many other means for loading a private key, including // from other formats and directly from memory (i.e. not file-based). Get Create (RefClass(cComChilkatOAuth1)) To hoOauth1 If (Not(IsComObjectCreated(hoOauth1))) Begin Send CreateComObject of hoOauth1 End Set ComConsumerKey Of hoOauth1 To sConsumerKey Set ComConsumerSecret Of hoOauth1 To sConsumerSecret Set ComToken Of hoOauth1 To sConsumerKey Set ComTokenSecret Of hoOauth1 To sConsumerSecret Set ComSignatureMethod Of hoOauth1 To "RSA-SHA1" Get ComSetRsaKey Of hoOauth1 vPrivKeyFromPfx To iSuccess Send Destroy of hoPrivKeyFromPfx // Install the OAuth1 authenticator. Get pvComObject of hoOauth1 to vOauth1 Get ComSetAuthOAuth1 Of hoRest vOauth1 False To iSuccess Showln "OK, the Xero OAuth1 is initialized and the REST object is ready to make REST API calls.." // ----------------------------------------------------------------- // Make a call to verify that OAuth1 through an HTTP proxy works.. // Get the full list of contacts. Get Create (RefClass(cComChilkatStringBuilder)) To hoSbXml If (Not(IsComObjectCreated(hoSbXml))) Begin Send CreateComObject of hoSbXml End Get pvComObject of hoSbXml to vSbXml Get ComFullRequestNoBodySb Of hoRest "GET" "/api.xro/2.0/Contacts" vSbXml To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoRest To sTemp1 Showln sTemp1 Procedure_Return End // A 200 response is expected for actual success. Get ComResponseStatusCode Of hoRest To iTemp1 If (iTemp1 <> 200) Begin Get ComGetAsString Of hoSbXml To sTemp1 Showln sTemp1 Procedure_Return End // Iterate over the contacts.. Move False To iBAutoTrim Get Create (RefClass(cComChilkatXml)) To hoXml If (Not(IsComObjectCreated(hoXml))) Begin Send CreateComObject of hoXml End Get pvComObject of hoSbXml to vSbXml Get ComLoadSb Of hoXml vSbXml iBAutoTrim To iSuccess Get ComSaveXml Of hoXml "qa_cache/xero_contacts.xml" To iSuccess // How many records exist? Get ComNumChildrenAt Of hoXml "Contacts" To iRecordCount Showln "numRecords = " iRecordCount Move 0 To i While (i < iRecordCount) Set ComI Of hoXml To i Get ComGetChildContent Of hoXml "Contacts|Contact[i]|ContactID" To sTemp1 Showln "ContactID: " sTemp1 Move i + 1 To i Loop End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.