Sample code for 30+ languages & platforms
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

Swift

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()

}