Sample code for 30+ languages & platforms
Lua Requires Chilkat v11.0.0+

RDAP Domain Lookup using rdap.org

See more HTTP Misc Examples

Demonstrates doing an RDAP domain lookup using the rdap.org public RDAP server.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

local http = chilkat.Http.new()

-- Send HTTP requests to https://rdap.org/<type>/<object>, where <type> is the object type (one of domain, ip, autnum, entity etc)
-- and <object> is the object identifier (eg example.com, 192.168.0.1, 64496, etc).

-- For example, here's a lookup for "oracle.com"
local sbResponse = chilkat.StringBuilder.new()
local success = http:quick_get_sb("https://rdap.org/domain/oracle.com", sbResponse)
if not success then
    print(http.last_error_text)
    return
end

local statusCode = http.last_status
if statusCode ~= 200 then
    print("Error response:")
    print(sbResponse:get_as_string())
    print("status code: " .. statusCode)
    return
end

-- Load the JSON response and examine..

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

local json = chilkat.JsonObject.new()
json:load_sb(sbResponse)
json.emit_compact = false
print(json:emit())

-- Here's a sample response, and the parsing code generated from the above online tool follows..

-- {
--   "objectClassName": "domain",
--   "handle": "607513_DOMAIN_COM-VRSN",
--   "ldhName": "ORACLE.COM",
--   "links": [
--     {
--       "value": "https:\/\/rdap.verisign.com\/com\/v1\/domain\/ORACLE.COM",
--       "rel": "self",
--       "href": "https:\/\/rdap.verisign.com\/com\/v1\/domain\/ORACLE.COM",
--       "type": "application\/rdap+json"
--     },
--     {
--       "value": "https:\/\/rdap.markmonitor.com\/rdap\/domain\/ORACLE.COM",
--       "rel": "related",
--       "href": "https:\/\/rdap.markmonitor.com\/rdap\/domain\/ORACLE.COM",
--       "type": "application\/rdap+json"
--     }
--   ],
--   "status": [
--     "client delete prohibited",
--     "client transfer prohibited",
--     "client update prohibited",
--     "server delete prohibited",
--     "server transfer prohibited",
--     "server update prohibited"
--   ],
--   "entities": [
--     {
--       "objectClassName": "entity",
--       "handle": "292",
--       "roles": [
--         "registrar"
--       ],
--       "publicIds": [
--         {
--           "type": "IANA Registrar ID",
--           "identifier": "292"
--         }
--       ],
--       "vcardArray": [
--         "vcard",
--         [
--           [
--             "version",
--             {},
--             "text",
--             "4.0"
--           ],
--           [
--             "fn",
--             {},
--             "text",
--             "MarkMonitor Inc."
--           ]
--         ]
--       ],
--       "entities": [
--         {
--           "objectClassName": "entity",
--           "roles": [
--             "abuse"
--           ],
--           "vcardArray": [
--             "vcard",
--             [
--               [
--                 "version",
--                 {},
--                 "text",
--                 "4.0"
--               ],
--               [
--                 "fn",
--                 {},
--                 "text",
--                 ""
--               ],
--               [
--                 "tel",
--                 {
--                   "type": "voice"
--                 },
--                 "uri",
--                 "tel:+1.2086851750"
--               ],
--               [
--                 "email",
--                 {},
--                 "text",
--                 "abusecomplaints@markmonitor.com"
--               ]
--             ]
--           ]
--         }
--       ]
--     }
--   ],
--   "events": [
--     {
--       "eventAction": "registration",
--       "eventDate": "1988-12-02T05:00:00Z"
--     },
--     {
--       "eventAction": "expiration",
--       "eventDate": "2025-12-01T05:00:00Z"
--     },
--     {
--       "eventAction": "last changed",
--       "eventDate": "2024-10-30T09:32:52Z"
--     },
--     {
--       "eventAction": "last update of RDAP database",
--       "eventDate": "2024-11-26T14:11:14Z"
--     }
--   ],
--   "secureDNS": {
--     "delegationSigned": false
--   },
--   "nameservers": [
--     {
--       "objectClassName": "nameserver",
--       "ldhName": "A1-160.AKAM.NET"
--     },
--     {
--       "objectClassName": "nameserver",
--       "ldhName": "A11-66.AKAM.NET"
--     },
--     {
--       "objectClassName": "nameserver",
--       "ldhName": "A13-65.AKAM.NET"
--     },
--     {
--       "objectClassName": "nameserver",
--       "ldhName": "A18-67.AKAM.NET"
--     },
--     {
--       "objectClassName": "nameserver",
--       "ldhName": "NS1.P201.DNS.ORACLECLOUD.NET"
--     },
--     {
--       "objectClassName": "nameserver",
--       "ldhName": "NS2.P201.DNS.ORACLECLOUD.NET"
--     },
--     {
--       "objectClassName": "nameserver",
--       "ldhName": "NS3.P201.DNS.ORACLECLOUD.NET"
--     },
--     {
--       "objectClassName": "nameserver",
--       "ldhName": "NS4.P201.DNS.ORACLECLOUD.NET"
--     }
--   ],
--   "rdapConformance": [
--     "rdap_level_0",
--     "icann_rdap_technical_implementation_guide_0",
--     "icann_rdap_response_profile_0"
--   ],
--   "notices": [
--     {
--       "title": "Terms of Use",
--       "description": [
--         "Service subject to Terms of Use."
--       ],
--       "links": [
--         {
--           "href": "https:\/\/www.verisign.com\/domain-names\/registration-data-access-protocol\/terms-service\/index.xhtml",
--           "type": "text\/html"
--         }
--       ]
--     },
--     {
--       "title": "Status Codes",
--       "description": [
--         "For more information on domain status codes, please visit https:\/\/icann.org\/epp"
--       ],
--       "links": [
--         {
--           "href": "https:\/\/icann.org\/epp",
--           "type": "text\/html"
--         }
--       ]
--     },
--     {
--       "title": "RDDS Inaccuracy Complaint Form",
--       "description": [
--         "URL of the ICANN RDDS Inaccuracy Complaint Form: https:\/\/icann.org\/wicf"
--       ],
--       "links": [
--         {
--           "href": "https:\/\/icann.org\/wicf",
--           "type": "text\/html"
--         }
--       ]
--     }
--   ]
-- }

local value = ""
local rel = ""
local href = ""
local v_type = ""
local strVal = ""
local j = 0
local count_j = 0
local identifier = ""
local k = 0
local count_k = 0
local json1 = chilkat.JsonObject.new()
local i1 = 0
local count_i1 = 0
local j1 = 0
local count_j1 = 0
local eventAction = ""
local eventDate = ""
local title = ""

local objectClassName = json:string_of("objectClassName")
local handle = json:string_of("handle")
local ldhName = json:string_of("ldhName")
local DelegationSigned = json:bool_of("secureDNS.delegationSigned")
local i = 0
local count_i = json:size_of_array("links")
while i < count_i do
    json.i = i
    value = json:string_of("links[i].value")
    rel = json:string_of("links[i].rel")
    href = json:string_of("links[i].href")
    v_type = json:string_of("links[i].type")
    i = i + 1
end

i = 0
count_i = json:size_of_array("status")
while i < count_i do
    json.i = i
    strVal = json:string_of("status[i]")
    i = i + 1
end

i = 0
count_i = json:size_of_array("entities")
while i < count_i do
    json.i = i
    objectClassName = json:string_of("entities[i].objectClassName")
    handle = json:string_of("entities[i].handle")
    j = 0
    count_j = json:size_of_array("entities[i].roles")
    while j < count_j do
        json.j = j
        strVal = json:string_of("entities[i].roles[j]")
        j = j + 1
    end

    j = 0
    count_j = json:size_of_array("entities[i].publicIds")
    while j < count_j do
        json.j = j
        v_type = json:string_of("entities[i].publicIds[j].type")
        identifier = json:string_of("entities[i].publicIds[j].identifier")
        j = j + 1
    end

    j = 0
    count_j = json:size_of_array("entities[i].vcardArray")
    while j < count_j do
        json.j = j
        strVal = json:string_of("entities[i].vcardArray[j]")
        k = 0
        count_k = json:size_of_array("entities[i].vcardArray[j]")
        while k < count_k do
            json.k = k
            json:object_of2("entities[i].vcardArray[j][k]", json1)

            i1 = 0
            count_i1 = json1:size_of_array("")
            while i1 < count_i1 do
                json1.i = i1
                strVal = json1:string_of("[i]")
                i1 = i1 + 1
            end

            k = k + 1
        end

        j = j + 1
    end

    j = 0
    count_j = json:size_of_array("entities[i].entities")
    while j < count_j do
        json.j = j
        objectClassName = json:string_of("entities[i].entities[j].objectClassName")
        k = 0
        count_k = json:size_of_array("entities[i].entities[j].roles")
        while k < count_k do
            json.k = k
            strVal = json:string_of("entities[i].entities[j].roles[k]")
            k = k + 1
        end

        k = 0
        count_k = json:size_of_array("entities[i].entities[j].vcardArray")
        while k < count_k do
            json.k = k
            strVal = json:string_of("entities[i].entities[j].vcardArray[k]")
            json:object_of2("entities[i].entities[j].vcardArray[k]", json1)

            i1 = 0
            count_i1 = json1:size_of_array("")
            while i1 < count_i1 do
                json1.i = i1
                j1 = 0
                count_j1 = json1:size_of_array("[i]")
                while j1 < count_j1 do
                    json1.j = j1
                    strVal = json1:string_of("[i][j]")
                    j1 = j1 + 1
                end

                i1 = i1 + 1
            end

            k = k + 1
        end

        j = j + 1
    end

    i = i + 1
end

i = 0
count_i = json:size_of_array("events")
while i < count_i do
    json.i = i
    eventAction = json:string_of("events[i].eventAction")
    eventDate = json:string_of("events[i].eventDate")
    i = i + 1
end

i = 0
count_i = json:size_of_array("nameservers")
while i < count_i do
    json.i = i
    objectClassName = json:string_of("nameservers[i].objectClassName")
    ldhName = json:string_of("nameservers[i].ldhName")
    i = i + 1
end

i = 0
count_i = json:size_of_array("rdapConformance")
while i < count_i do
    json.i = i
    strVal = json:string_of("rdapConformance[i]")
    i = i + 1
end

i = 0
count_i = json:size_of_array("notices")
while i < count_i do
    json.i = i
    title = json:string_of("notices[i].title")
    j = 0
    count_j = json:size_of_array("notices[i].description")
    while j < count_j do
        json.j = j
        strVal = json:string_of("notices[i].description[j]")
        j = j + 1
    end

    j = 0
    count_j = json:size_of_array("notices[i].links")
    while j < count_j do
        json.j = j
        href = json:string_of("notices[i].links[j].href")
        v_type = json:string_of("notices[i].links[j].type")
        j = j + 1
    end

    i = i + 1
end