Swift
Swift
REST through SOCKS Proxy
See more REST Examples
Demonstrates how to connect through a SOCKS proxy to make REST API calls.Chilkat Swift Downloads
func chilkatTest() {
var success: Bool = false
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// This example connects to a REST server through a SOCKS proxy.
// It will connect to the Amazon AWS service for this example.
let rest = CkoRest()!
let socket = CkoSocket()!
// 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 HTTP proxy to the Amazon AWS server for the S3 service.
var bTls: Bool = true
var port: Int = 443
var maxWaitMs: Int = 5000
success = socket.connect(hostname: "s3.amazonaws.com", port: port, ssl: bTls, maxWaitMs: maxWaitMs)
if success != true {
print("Connect Failure Error Code: \(socket.connectFailReason.intValue)")
print("\(socket.lastErrorText!)")
return
}
// Use the proxied TLS connection:
success = rest.useConnection(connection: socket, autoReconnect: true)
if success != true {
print("\(rest.lastErrorText!)")
return
}
// Provide AWS credentials for the REST call.
let authAws = CkoAuthAws()!
authAws.accessKey = "AWS_ACCESS_KEY"
authAws.secretKey = "AWS_SECRET_KEY"
authAws.serviceName = "s3"
success = rest.setAuthAws(authProvider: authAws)
// List all buckets for the account...
var responseXml: String? = rest.fullRequestNoBody(httpVerb: "GET", uriPath: "/")
if rest.lastMethodSuccess != true {
print("\(rest.lastErrorText!)")
return
}
let xml = CkoXml()!
success = xml.load(xmlData: responseXml)
// Show the full XML returned.
print("\(xml.getXml()!)")
// Iterate over the buckets, showing each bucket name.
success = xml.findChild2(tagPath: "Buckets")
if xml.firstChild2() == true {
print("\(xml.getChildContent(tagPath: "Name")!)")
while (xml.nextSibling2() == true) {
print("\(xml.getChildContent(tagPath: "Name")!)")
}
}
// Move the internal pointer back to the root node.
xml.getRoot2()
}