Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

REST POST JSON using Gzip Content Encoding

See more REST Examples

Demonstrates how to send a JSON POST using the gzip Content-Encoding.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.StringBuilder,
  Chilkat.Rest,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  json: TJsonObject;
  rest: TRest;
  sbReq: TStringBuilder;
  sbResp: TStringBuilder;
  jsonResp: TJsonObject;

begin
  success := False;

  //  This requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  //  Use the online tool at https://tools.chilkat.io/Default.cshtml
  //  to generate the JSON code that creates this JSON:

  //  {
  //      "lists": [
  //          {
  //              "id": "1511199999"
  //          }
  //      ],
  //      "confirmed": false,
  //      "email_addresses": [
  //          {
  //              "email_address": "support@chilkatsoft.com"
  //          }
  //      ],
  //      "first_name": "Matt",
  //      "last_name": "Smith"
  //  }
  //  

  json := TJsonObject.Create;
  json.UpdateString('lists[0].id','1511199999');
  json.UpdateBool('confirmed',False);
  json.UpdateString('email_addresses[0].email_address','support@chilkatsoft.com');
  json.UpdateString('first_name','Matt');
  json.UpdateString('last_name','Smith');

  rest := TRest.Create;

  success := rest.Connect('api.constantcontact.com',443,True,True);
  if (success <> True) then
    begin
      WriteLn(rest.LastErrorText);
      Exit;
    end;

  rest.AddHeader('Content-Type','application/json');
  rest.AddHeader('Authorization','Bearer xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx');

  //  Tell the server you'll accept only an application/json response.
  rest.AddHeader('Accept','application/json');

  //  Indicate that we'll be sending the request body gzipped.
  rest.AddHeader('Content-Encoding','gzip');

  sbReq := TStringBuilder.Create;
  json.EmitSb(sbReq);

  //  Send the POST.
  sbResp := TStringBuilder.Create;
  success := rest.FullRequestSb('POST','/v2/contacts?action_by=ACTION_BY_VISITOR&api_key=xxxxxxx',sbReq,sbResp);
  if (success <> True) then
    begin
      WriteLn(rest.LastErrorText);
      Exit;
    end;

  WriteLn('Response body:');
  WriteLn(sbResp.GetAsString());

  if (rest.ResponseStatusCode <> 200) then
    begin
      WriteLn('Received error response code: ' + rest.ResponseStatusCode);
      Exit;
    end;

  jsonResp := TJsonObject.Create;
  jsonResp.LoadSb(sbResp);

  //  Use the online tool at https://tools.chilkat.io/jsonParse.cshtml
  //  to generate the JSON code that parses the JSON response..


  json.Free;
  rest.Free;
  sbReq.Free;
  sbResp.Free;
  jsonResp.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.