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

Cloudfare DNS over HTTPS

See more Cloudfare Examples

Cloudflare offers a DNS over HTTPS resolver at: https://cloudflare-dns.com/dns-query

This example demonstrates how to do a DNS lookup for a domain using Cloudfare's HTTPS resolver.

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.JsonObject,
  Chilkat.Http;

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

procedure RunDemo;
var
  http: THttp;
  url: string;
  jsonResp: string;
  json: TJsonObject;
  Status: Integer;
  TC: Boolean;
  RD: Boolean;
  RA: Boolean;
  AD: Boolean;
  CD: Boolean;
  i: Integer;
  count_i: Integer;
  name: string;
  type: Integer;
  TTL: Integer;
  data: string;
  ipAddr: string;

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

  http := THttp.Create;

  //  Send the following CURL request:   curl -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=chilkat.io&type=A'

  http.Accept := 'application/dns-json';

  url := 'https://cloudflare-dns.com/dns-query?name=chilkat.io&type=A';

  jsonResp := http.QuickGetStr(url);
  if (http.LastMethodSuccess <> True) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  WriteLn('Response Status Code: ' + http.LastStatus);

  json := TJsonObject.Create;
  json.Load(jsonResp);
  json.EmitCompact := False;
  WriteLn(json.Emit());

  if (http.LastStatus <> 200) then
    begin
      WriteLn('Failed.');
      Exit;
    end;

  //  Sample output...
  //  (See the parsing code below..)
  //  

  //  {
  //    "Status": 0,
  //    "TC": false,
  //    "RD": true,
  //    "RA": true,
  //    "AD": false,
  //    "CD": false,
  //    "Question": [
  //      {
  //        "name": "chilkat.io.",
  //        "type": 1
  //      }
  //    ],
  //    "Answer": [
  //      {
  //        "name": "chilkat.io.",
  //        "type": 1,
  //        "TTL": 900,
  //        "data": "52.25.83.238"
  //      }
  //    ]
  //  }

  //  Use this online tool to generate parsing code from sample JSON: 
  //  Generate Parsing Code from JSON

  Status := json.IntOf('Status');
  TC := json.BoolOf('TC');
  RD := json.BoolOf('RD');
  RA := json.BoolOf('RA');
  AD := json.BoolOf('AD');
  CD := json.BoolOf('CD');
  i := 0;
  count_i := json.SizeOfArray('Question');
  while i < count_i do
    begin
      json.I := i;
      name := json.StringOf('Question[i].name');
      type := json.IntOf('Question[i].type');
      i := i + 1;
    end;

  i := 0;
  count_i := json.SizeOfArray('Answer');
  //  The domain name resolves to 1 or more IP addresses..
  while i < count_i do
    begin
      json.I := i;
      name := json.StringOf('Answer[i].name');
      type := json.IntOf('Answer[i].type');
      TTL := json.IntOf('Answer[i].TTL');
      ipAddr := json.StringOf('Answer[i].data');

      WriteLn('IP Address: ' + ipAddr);
      i := i + 1;
    end;



  http.Free;
  json.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.