Sample code for 30+ languages & platforms
Delphi ActiveX

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 Delphi ActiveX Downloads

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
rest: TChilkatRest;
bTls: Integer;
port: Integer;
bAutoReconnect: Integer;
authAws: TChilkatAuthAws;
path: WideString;
sbPath: TChilkatStringBuilder;
responseJson: WideString;

begin
success := 0;

// 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 := TChilkatRest.Create(Self);

// Connect to the REST server.
bTls := 1;
port := 443;
bAutoReconnect := 1;
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 := TChilkatAuthAws.Create(Self);
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.ControlInterface);

// 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 := TChilkatStringBuilder.Create(Self);
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/');

Memo1.Lines.Add('URL encoded path: ' + sbPath.GetAsString());

responseJson := rest.FullRequestNoBody('GET',sbPath.GetAsString());
if (rest.LastMethodSuccess <> 1) then
  begin
    Memo1.Lines.Add(rest.LastErrorText);
    Exit;
  end;

Memo1.Lines.Add(responseJson);
Memo1.Lines.Add('----');
end;