Sample code for 30+ languages & platforms
Unicode C

REST through SOCKS Proxy

See more REST Examples

Demonstrates how to connect through a SOCKS proxy to make REST API calls.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkRestW.h>
#include <C_CkSocketW.h>
#include <C_CkAuthAwsW.h>
#include <C_CkXmlW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkRestW rest;
    HCkSocketW socket;
    BOOL bTls;
    int port;
    int maxWaitMs;
    HCkAuthAwsW authAws;
    const wchar_t *responseXml;
    HCkXmlW xml;

    success = 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.
    rest = CkRestW_Create();
    socket = CkSocketW_Create();

    // Set the SOCKS proxy domain or IP address, port, and SOCKS version number (4 or 5)
    CkSocketW_putSocksHostname(socket,L"192.168.1.100");
    CkSocketW_putSocksPort(socket,1080);
    CkSocketW_putSocksVersion(socket,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.
    bTls = TRUE;
    port = 443;
    maxWaitMs = 5000;
    success = CkSocketW_Connect(socket,L"s3.amazonaws.com",port,bTls,maxWaitMs);
    if (success != TRUE) {
        wprintf(L"Connect Failure Error Code: %d\n",CkSocketW_getConnectFailReason(socket));
        wprintf(L"%s\n",CkSocketW_lastErrorText(socket));
        CkRestW_Dispose(rest);
        CkSocketW_Dispose(socket);
        return;
    }

    // Use the proxied TLS connection:
    success = CkRestW_UseConnection(rest,socket,TRUE);
    if (success != TRUE) {
        wprintf(L"%s\n",CkRestW_lastErrorText(rest));
        CkRestW_Dispose(rest);
        CkSocketW_Dispose(socket);
        return;
    }

    // Provide AWS credentials for the REST call.
    authAws = CkAuthAwsW_Create();
    CkAuthAwsW_putAccessKey(authAws,L"AWS_ACCESS_KEY");
    CkAuthAwsW_putSecretKey(authAws,L"AWS_SECRET_KEY");
    CkAuthAwsW_putServiceName(authAws,L"s3");
    success = CkRestW_SetAuthAws(rest,authAws);

    // List all buckets for the account...
    responseXml = CkRestW_fullRequestNoBody(rest,L"GET",L"/");
    if (CkRestW_getLastMethodSuccess(rest) != TRUE) {
        wprintf(L"%s\n",CkRestW_lastErrorText(rest));
        CkRestW_Dispose(rest);
        CkSocketW_Dispose(socket);
        CkAuthAwsW_Dispose(authAws);
        return;
    }

    xml = CkXmlW_Create();
    success = CkXmlW_LoadXml(xml,responseXml);

    // Show the full XML returned.
    wprintf(L"%s\n",CkXmlW_getXml(xml));

    // Iterate over the buckets, showing each bucket name.
    success = CkXmlW_FindChild2(xml,L"Buckets");
    if (CkXmlW_FirstChild2(xml) == TRUE) {
        wprintf(L"%s\n",CkXmlW_getChildContent(xml,L"Name"));
        while ((CkXmlW_NextSibling2(xml) == TRUE)) {
            wprintf(L"%s\n",CkXmlW_getChildContent(xml,L"Name"));
        }

    }

    // Move the internal pointer back to the root node.
    CkXmlW_GetRoot2(xml);


    CkRestW_Dispose(rest);
    CkSocketW_Dispose(socket);
    CkAuthAwsW_Dispose(authAws);
    CkXmlW_Dispose(xml);

    }