Sample code for 30+ languages & platforms
Delphi DLL

HTTP POST x-www-form-urlencoded

Demonstrates how to send a simple x-www-form-urlencoded POST.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Http, HttpRequest, HttpResponse, FileAccess;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
http: HCkHttp;
jsonStr: PWideChar;
req: HCkHttpRequest;
resp: HCkHttpResponse;
responseBody: PWideChar;
fac: HCkFileAccess;
filepath: PWideChar;

begin
success := False;

http := CkHttp_Create();

jsonStr := '{ some json ... }';

req := CkHttpRequest_Create();
// This query parameter just happens to be named "json" and contains JSON text.
CkHttpRequest_AddParam(req,'json',jsonStr);

// We can optionally add more query parameters. 
CkHttpRequest_AddParam(req,'abc','123');
CkHttpRequest_AddParam(req,'xml','<abc>123</abc>');

// Note: Just because we passed a query param named "json" or "xml" means nothing special.  It's still just
// a name=value query parameter..

CkHttpRequest_putHttpVerb(req,'POST');
CkHttpRequest_putContentType(req,'application/x-www-form-urlencoded');

resp := CkHttpResponse_Create();
success := CkHttp_HttpReq(http,'http://example.com/xyz/connect/report',req,resp);
if (success = False) then
  begin
    Memo1.Lines.Add(CkHttp__lastErrorText(http));
    Exit;
  end;

if (CkHttpResponse_getStatusCode(resp) <> 200) then
  begin
    Memo1.Lines.Add('Hey, I didn''t receive the expected response status code!');
    Memo1.Lines.Add('status code = ' + IntToStr(CkHttpResponse_getStatusCode(resp)));
  end;

// Could be error text if the status code wasn't what we expected, or could be the response
// body you're seeking..
responseBody := CkHttpResponse__bodyStr(resp);
Memo1.Lines.Add(responseBody);

fac := CkFileAccess_Create();
filepath := 'some file path';
success := CkFileAccess_WriteEntireTextFile(fac,filepath,responseBody,'utf-8',False);
if (success <> True) then
  begin
    Memo1.Lines.Add(CkFileAccess__lastErrorText(fac));
  end;

CkHttp_Dispose(http);
CkHttpRequest_Dispose(req);
CkHttpResponse_Dispose(resp);
CkFileAccess_Dispose(fac);

end;