Sample code for 30+ languages & platforms
Unicode C

HTTP POST x-www-form-urlencoded

Demonstrates how to send a simple x-www-form-urlencoded POST.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkHttpW.h>
#include <C_CkHttpRequestW.h>
#include <C_CkHttpResponseW.h>
#include <C_CkFileAccessW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkHttpW http;
    const wchar_t *jsonStr;
    HCkHttpRequestW req;
    HCkHttpResponseW resp;
    const wchar_t *responseBody;
    HCkFileAccessW fac;
    const wchar_t *filepath;

    success = FALSE;

    http = CkHttpW_Create();

    jsonStr = L"{ some json ... }";

    req = CkHttpRequestW_Create();
    //  This query parameter just happens to be named "json" and contains JSON text.
    CkHttpRequestW_AddParam(req,L"json",jsonStr);

    //  We can optionally add more query parameters. 
    CkHttpRequestW_AddParam(req,L"abc",L"123");
    CkHttpRequestW_AddParam(req,L"xml",L"<abc>123</abc>");

    //  Note: Just because we passed a query param named "json" or "xml" means nothing special.  It's still just
    //  a name=value query parameter..

    CkHttpRequestW_putHttpVerb(req,L"POST");
    CkHttpRequestW_putContentType(req,L"application/x-www-form-urlencoded");

    resp = CkHttpResponseW_Create();
    success = CkHttpW_HttpReq(http,L"http://example.com/xyz/connect/report",req,resp);
    if (success == FALSE) {
        wprintf(L"%s\n",CkHttpW_lastErrorText(http));
        CkHttpW_Dispose(http);
        CkHttpRequestW_Dispose(req);
        CkHttpResponseW_Dispose(resp);
        return;
    }

    if (CkHttpResponseW_getStatusCode(resp) != 200) {
        wprintf(L"Hey, I didn't receive the expected response status code!\n");
        wprintf(L"status code = %d\n",CkHttpResponseW_getStatusCode(resp));
    }

    //  Could be error text if the status code wasn't what we expected, or could be the response
    //  body you're seeking..
    responseBody = CkHttpResponseW_bodyStr(resp);
    wprintf(L"%s\n",responseBody);

    fac = CkFileAccessW_Create();
    filepath = L"some file path";
    success = CkFileAccessW_WriteEntireTextFile(fac,filepath,responseBody,L"utf-8",FALSE);
    if (success != TRUE) {
        wprintf(L"%s\n",CkFileAccessW_lastErrorText(fac));
    }



    CkHttpW_Dispose(http);
    CkHttpRequestW_Dispose(req);
    CkHttpResponseW_Dispose(resp);
    CkFileAccessW_Dispose(fac);

    }