Pascal (Lazarus/Delphi)
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
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.