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

REST URL Encode Path Parts and Query Params

See more REST Examples

When passing a path to a Chilkat REST function, the path parts and query params should be URL encoded. This example explains..

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.AuthAws,
  Chilkat.Rest,
  Chilkat.StringBuilder;

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

procedure RunDemo;
var
  success: Boolean;
  rest: TRest;
  bTls: Boolean;
  port: Integer;
  bAutoReconnect: Boolean;
  authAws: TAuthAws;
  path: string;
  sbPath: TStringBuilder;
  responseJson: string;

begin
  success := False;

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

  //  This example demonstrates how to URL encode the path passed to a REST function.
  //  It is demonstrated with an Amazon SP API GET request to get details about a listings item for a selling partner.
  //  See https://developer-docs.amazon.com/sp-api/docs/listings-items-api-v2021-08-01-reference#getlistingsitem

  rest := TRest.Create;

  //  Connect to the REST server.
  bTls := True;
  port := 443;
  bAutoReconnect := True;
  success := rest.Connect('sellingpartnerapi-eu.amazon.com',port,bTls,bAutoReconnect);

  rest.ClearAllQueryParams();
  rest.AddQueryParam('marketplaceids','XYZABC123');
  rest.AddQueryParam('includedData','offers');

  rest.AddHeader('x-amz-access-token','YOUR_ACCESS_TOKEN');

  authAws := TAuthAws.Create;
  authAws.AccessKey := 'YOUR_AWS_APP_ID';
  authAws.SecretKey := 'YOUR_AWS_APP_SECRET_KEY';
  authAws.Region := 'eu-west-1';
  authAws.ServiceName := 'execute-api';
  rest.SetAuthAws(authAws);

  //  The path that is passed to FullRequestNobBody

  //  Here's a sample path that is not yet URL encoded.
  path := '/listings/2022-07-01/items/ABCDEFGHIJ/100x100_28g_LANCETS(BOXED)';

  //  The path passed to FullRequestNoBody needs to have the parts URL-encoded.
  //  The "/" chars are not URL encoded, but the individual path parts should be URL encoded.
  //  For example:  /listings/2022-07-01/items/ABCDEFGHIJ/100x100_28g_LANCETS%28BOXED%29

  //  In this case, we'll prepare the path like this:
  sbPath := TStringBuilder.Create;
  sbPath.Append('100x100_28g_LANCETS(BOXED)');
  //  URL encode the contents of the sbPath.
  sbPath.Encode('url','utf-8');
  //  Prepend the remaining which does not need to be URL encoded.
  sbPath.Prepend('/listings/2022-07-01/items/ABCDEFGHIJ/');

  WriteLn('URL encoded path: ' + sbPath.GetAsString());

  responseJson := rest.FullRequestNoBody('GET',sbPath.GetAsString());
  if (rest.LastMethodSuccess <> True) then
    begin
      WriteLn(rest.LastErrorText);
      Exit;
    end;

  WriteLn(responseJson);
  WriteLn('----');


  rest.Free;
  authAws.Free;
  sbPath.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.