VB.NET Requires Chilkat v11.0.0+
VB.NET
Xero API through an SOCKS Proxy
This example demonstrates connecting through a SOCKS proxy w/ 2-legged OAuth for a Xero private application.Chilkat VB.NET Downloads
Dim success As Boolean = False
' 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.
Dim rest As New Chilkat.Rest
' Connect to the Xero server through an HTTP proxy, and then tell the REST object
' to use the socket connection.
Dim socket As New Chilkat.Socket
' Set the SOCKS proxy domain or IP address, port, and SOCKS version number (4 or 5)
socket.SocksHostname = "192.168.1.100"
socket.SocksPort = 1080
socket.SocksVersion = 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..
Dim bTls As Boolean = True
Dim port As Integer = 443
Dim maxWaitMs As Integer = 5000
success = socket.Connect("api.xero.com",port,bTls,maxWaitMs)
If (success <> True) Then
Debug.WriteLine("Connect Failure Error Code: " & socket.ConnectFailReason)
Debug.WriteLine(socket.LastErrorText)
Exit Sub
End If
' Use the SOCKS proxied TLS connection:
success = rest.UseConnection(socket,True)
If (success = False) Then
Debug.WriteLine(rest.LastErrorText)
Exit Sub
End If
' 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..
Dim consumerKey As String = "XERO_PRIVATE_APP_KEY"
Dim consumerSecret As String = "XERO_PRIVATE_APP_SECRET"
' 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.
Dim pfx As New Chilkat.Pfx
success = pfx.LoadPfxFile("qa_data/certs/xero_private_app/public_privatekey.pfx","PFX_PASSWORD")
If (success = False) Then
Debug.WriteLine(pfx.LastErrorText)
Exit Sub
End If
Dim privKeyFromPfx As New Chilkat.PrivateKey
success = pfx.PrivateKeyAt(0,privKeyFromPfx)
If (success = False) Then
Debug.WriteLine(pfx.LastErrorText)
Exit Sub
End If
' Or we can load from a PEM..
Dim privKeyFromPem As New Chilkat.PrivateKey
success = privKeyFromPem.LoadPemFile("qa_data/certs/xero_private_app/privatekey.pem")
If (success = False) Then
Debug.WriteLine(privKeyFromPem.LastErrorText)
Exit Sub
End If
' Note: There are many other means for loading a private key, including
' from other formats and directly from memory (i.e. not file-based).
Dim oauth1 As New Chilkat.OAuth1
oauth1.ConsumerKey = consumerKey
oauth1.ConsumerSecret = consumerSecret
oauth1.Token = consumerKey
oauth1.TokenSecret = consumerSecret
oauth1.SignatureMethod = "RSA-SHA1"
oauth1.SetRsaKey(privKeyFromPfx)
' Install the OAuth1 authenticator.
rest.SetAuthOAuth1(oauth1,False)
Debug.WriteLine("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.
Dim sbXml As New Chilkat.StringBuilder
success = rest.FullRequestNoBodySb("GET","/api.xro/2.0/Contacts",sbXml)
If (success = False) Then
Debug.WriteLine(rest.LastErrorText)
Exit Sub
End If
' A 200 response is expected for actual success.
If (rest.ResponseStatusCode <> 200) Then
Debug.WriteLine(sbXml.GetAsString())
Exit Sub
End If
' Iterate over the contacts..
Dim bAutoTrim As Boolean = False
Dim xml As New Chilkat.Xml
xml.LoadSb(sbXml,bAutoTrim)
xml.SaveXml("qa_cache/xero_contacts.xml")
' How many records exist?
Dim recordCount As Integer = xml.NumChildrenAt("Contacts")
Debug.WriteLine("numRecords = " & recordCount)
Dim i As Integer = 0
While i < recordCount
xml.I = i
Debug.WriteLine("ContactID: " & xml.GetChildContent("Contacts|Contact[i]|ContactID"))
i = i + 1
End While