Unicode C
Unicode C
Adobe Analytics Reporting API (1.4)
See more HTTP Misc Examples
Demonstrates a simple POST of JSON to the Adobe Analytics Reporting API (v1.4)Chilkat Unicode C Downloads
#include <C_CkJsonObjectW.h>
#include <C_CkHttpW.h>
#include <C_CkDateTimeW.h>
#include <C_CkPrngW.h>
#include <C_CkStringBuilderW.h>
#include <C_CkCrypt2W.h>
#include <C_CkHttpResponseW.h>
void ChilkatSample(void)
{
BOOL success;
const wchar_t *url;
HCkJsonObjectW json;
HCkHttpW http;
HCkDateTimeW dt;
const wchar_t *timecreated;
HCkPrngW prng;
const wchar_t *nonce;
const wchar_t *secret;
HCkStringBuilderW sb;
HCkCrypt2W crypt;
const wchar_t *digest;
HCkStringBuilderW sbNonce;
HCkHttpResponseW resp;
success = FALSE;
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// In this example, replace "rsid" with your report suite id, and update the URL to use the correct endpoint
url = L"https://api.omniture.com/admin/1.4/rest/?method=Report.Queue";
json = CkJsonObjectW_Create();
CkJsonObjectW_UpdateString(json,L"reportDescription.reportSuiteID",L"rsid");
CkJsonObjectW_UpdateString(json,L"reportDescription.dateGranularity",L"hour");
http = CkHttpW_Create();
dt = CkDateTimeW_Create();
CkDateTimeW_SetFromCurrentSystemTime(dt);
timecreated = CkDateTimeW_getAsTimestamp(dt,FALSE);
prng = CkPrngW_Create();
nonce = CkPrngW_genRandom(prng,12,L"hex");
secret = L"SECRET";
sb = CkStringBuilderW_Create();
CkStringBuilderW_Append(sb,nonce);
CkStringBuilderW_Append(sb,timecreated);
CkStringBuilderW_Append(sb,secret);
crypt = CkCrypt2W_Create();
CkCrypt2W_putHashAlgorithm(crypt,L"sha1");
CkCrypt2W_putEncodingMode(crypt,L"base64");
digest = CkCrypt2W_hashStringENC(crypt,CkStringBuilderW_getAsString(sb));
sbNonce = CkStringBuilderW_Create();
CkStringBuilderW_Append(sbNonce,nonce);
CkStringBuilderW_Encode(sbNonce,L"base64");
CkStringBuilderW_Clear(sb);
CkStringBuilderW_Append(sb,L"UsernameToken Username=\"USERNAME\", PasswordDigest=\"");
CkStringBuilderW_Append(sb,digest);
CkStringBuilderW_Append(sb,L"\", Nonce=\"");
CkStringBuilderW_Append(sb,CkStringBuilderW_getAsString(sbNonce));
CkStringBuilderW_Append(sb,L"\", Created=\"");
CkStringBuilderW_Append(sb,timecreated);
CkStringBuilderW_Append(sb,L"\"");
wprintf(L"%s\n",CkStringBuilderW_getAsString(sb));
CkHttpW_SetRequestHeader(http,L"X-WSSE",CkStringBuilderW_getAsString(sb));
resp = CkHttpResponseW_Create();
success = CkHttpW_HttpJson(http,L"POST",url,json,L"text/json",resp);
if (success == FALSE) {
wprintf(L"%s\n",CkHttpW_lastErrorText(http));
CkJsonObjectW_Dispose(json);
CkHttpW_Dispose(http);
CkDateTimeW_Dispose(dt);
CkPrngW_Dispose(prng);
CkStringBuilderW_Dispose(sb);
CkCrypt2W_Dispose(crypt);
CkStringBuilderW_Dispose(sbNonce);
CkHttpResponseW_Dispose(resp);
return;
}
wprintf(L"Http Status code: %d\n",CkHttpResponseW_getStatusCode(resp));
wprintf(L"JSON response:\n");
wprintf(L"%s\n",CkHttpResponseW_bodyStr(resp));
CkJsonObjectW_Dispose(json);
CkHttpW_Dispose(http);
CkDateTimeW_Dispose(dt);
CkPrngW_Dispose(prng);
CkStringBuilderW_Dispose(sb);
CkCrypt2W_Dispose(crypt);
CkStringBuilderW_Dispose(sbNonce);
CkHttpResponseW_Dispose(resp);
}