Slik bruker du tipsbilk.net DNS Lookup API i JavaScript (NodeJS)

I denne opplæringen skal jeg demonstrere hvordan du bruker tipsbilk.net API i NodeJS for å sjekke DNS-postene til et hvilket som helst domene.

Vi skal bygge et enkelt skript som, når det kjøres, skriver ut IP-adressen til Googles søkeserver.

Dette skriptet vil bruke tipsbilk.net DNS Lookup API.

For å bygge den skal vi bruke tre tilnærminger, den første bruker den innebygde https-modulen i NodeJS. Den andre vil bruke nodehentingsmodulen. Deretter vil den siste bruke axios-klientbiblioteket.

Hva er tipsbilk.net API?

tipsbilk.net API tilbyr REST API-er for testing av nettstedytelse, DNS og sikkerhetsmålinger. Du kan gjøre ting som å ta et skjermbilde, generere PDF-er, gjøre nettskraping, portskanning og mye mer.

Forutsetninger

For å følge denne opplæringen trenger du en forståelse av JavaScript, inkludert løfter og ES6-syntaks. Når det gjelder programvaren, bør du ha NodeJS og et tekstredigeringsprogram som Visual Studio Code installert.

Du trenger en tipsbilk.net-konto for å få en API-nøkkel for autentisering når du sender forespørsler. For å få en, gå til API-landingssiden og opprette en gratis konto.

Etter at du har opprettet kontoen, bør du bli omdirigert til dashbordet, hvor du finner API-nøkkelen din.

Bygge prosjektet

For å begynne, lag en prosjektmappe og åpne den med en terminal du ønsker, og kjør kommandoen nedenfor.

npm init -y

Kommandoen ovenfor vil initialisere prosjektkatalogen som et NodeJS-prosjekt.

Deretter kjører du kommandoen nedenfor, som vil installere alle avhengigheter for prosjektet vårt

npm install dotenv axios node-fetch

Etter at avhengighetene har blitt installert, oppretter du tre skript i prosjektets rotmapp, nemlig vanilla.js, with-axios.js, with-fetch.js og en .env-fil for å lagre miljøvariablene våre.

Til slutt skal prosjektroten se slik ut:

Deretter åpner du .env-filen og legger til tipsbilk.net API-nøkkelen med følgende kodelinje:

API_KEY=<api key>

Erstatt med din faktiske API-nøkkel.

Vanilla.js

NodeJS har en innebygd http- og https-modul som vi kan bruke til å sende klientforespørsler. Vi skal bruke denne tilnærmingen først.

Åpne vanilla.js-filen og legg til følgende kodelinjer øverst for å importere prosjektets avhengigheter.

import { request } from "https";
import { config } from "dotenv";

Deretter skal vi kalle config()-funksjonen for å laste inn miljøvariabler. Deretter skal vi lagre API-nøkkelen og vertsnavnet i variabler.

config();

const apiKey = process.env.API_KEY;
const host="google.com";

Når vi kaller forespørselsfunksjonen for å starte en HTTP-forespørsel i NodeJS, må vi gi alternativer for verten og endepunktet vi vil koble til, HTTP-metoden vi skal bruke, og overskriftene for forespørselen. Så neste gang skal vi lage en variabel som vil lagre disse alternativene.

const options = {
  hostname: "api.tipsbilk.net.com",
  path: "/dnsrecord",
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": apiKey,
  },
};

Så langt ser koden i vanilla.js-filen slik ut:

import { request } from "https";
import { config } from "dotenv";

config();

const apiKey = process.env.API_KEY;
const host="google.com"

const options = {
  hostname: "api.tipsbilk.net.com",
  path: "/dnsrecord",
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": apiKey,
  },
};

Nå kan vi fortsette å kalle forespørselsfunksjonen som passerer i alternativmetoden:

const req = request(options, response => {

  // we are going to add response handlers here

});

Som du kan se, tar forespørselsfunksjonen inn to argumenter. Det første er alternativobjektet vi definerte tidligere. Den andre er en tilbakeringingsfunksjon som vil håndtere svaret fra serveren. Inne i tilbakeringingsfunksjonen kan vi legge til hendelseslyttere for når serveren sender data, fullfører sending av data eller sender en feil.

  Hvordan lages CPUer egentlig?

For å legge til de forskjellige responsbehandlerne, legg til følgende kodelinjer i tilbakeringingsfunksjonen:

let data = "";

response.on("data", chunk => {
  data += chunk;
});

response.on("end", () => {
  console.log(JSON.parse(data).data.A);
});

response.on("error", error => {
  console.log(error);
});

Datavariabelen er rett og slett en streng der vi skal lagre serverens JSON-svar når den streames tilbake til oss.

For å faktisk lagre dataene, skal vi lytte til responsobjektets på data-hendelse. Hver gang denne hendelsen utløses, skal vi legge til dataklumpen sendt av serveren til datavariabelen.

For så til slutt å bruke dataene, skal vi lytte til on-end-hendelsen på responsobjektet. Dette vil bli kalt når alle dataene er sendt fra serveren, og den har avsluttet svaret.

Til slutt skal vi lytte etter feil og logge dem til konsollen hvis de oppstår.

Derfor skal kallet til forespørselsfunksjonen se slik ut

const req = request(options, response => {

  let data = "";

  response.on("data", chunk => {
    data += chunk;
  });

  response.on("end", () => {
    console.log(JSON.parse(data).data.A);
  });

  response.on("error", error => {
    console.log(error);
  });

});

Til slutt må vi skrive noen data til forespørselsorganet og avslutte forespørselen.

req.write(JSON.stringify({ url: host, types: ["A"] }));
req.end();

Til slutt skal filen se slik ut:

import { request } from "https";
import { config } from "dotenv";

config();

const apiKey = process.env.API_KEY;
const host="google.com"

const options = {
  hostname: "api.tipsbilk.net.com",
  path: "/dnsrecord",
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": apiKey,
  },
};

const req = request(options, response => {

  let data = "";

  response.on("data", chunk => {
    data += chunk;
  });

  response.on("end", () => {
    console.log(JSON.parse(data).data.A);
  });

  response.on("error", error => {
    console.log(error);
  });

});

req.write(JSON.stringify({ url: host, types: ["A"] }));
req.end();

Nå, hvis du går tilbake til terminalen og kjører skriptet ved å bruke node vanilla.js-kommandoen, bør du få følgende utgang.

[
  { address: '172.253.122.101', ttl: 247 },
  { address: '172.253.122.113', ttl: 247 },
  { address: '172.253.122.100', ttl: 247 },
  { address: '172.253.122.102', ttl: 247 },
  { address: '172.253.122.138', ttl: 247 },
  { address: '172.253.122.139', ttl: 247 }
]

Det var det for første del. Den åpenbare ulempen med å bruke de innebygde HTTP/S-modulene er at det er detaljert. Klientbiblioteker som node-fetch vil hjelpe deg med å lage det samme programmet, men med klarere og mer konsis kode.

  Skyteknologi er gunstig for høyere utdanning: Her er hvorfor

node-henting

For å lage det samme skriptet, men med node-fetch, åpne with-fetch.js-filen og legg til følgende importer øverst.

import fetch from "node-fetch";
import { config } from "dotenv";

Deretter kaller du config-funksjonen for å konfigurere miljøvariabler og sette opp konstanter for API_KEY og verten hvis A-poster vi skal be om.

config();

const apiKey = process.env.API_KEY;
const host="google.com"

Deretter skal vi definere en funksjon for å lage API-kallet. Denne funksjonen vil være asynkron.

async function request() {
  // The function body will go here
}

Inne i funksjonens kropp må vi kalle hentefunksjonen vi importerte tidligere fra node-fetch-pakken.

const response = await fetch("https://api.tipsbilk.net.com/dnsrecord", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": apiKey,
    },
    body: JSON.stringify({ url: host, types: ["A"] }),
});

Så etter kallet til hentefunksjonen, ønsker vi å analysere svaret vårt og håndtere eventuelle feil som kan oppstå.

if (response.ok) {
    const { data } = await response.json();

    console.log(data.A);
  } else {
    console.log(response);
  }

På dette tidspunktet legger du til et anrop til funksjonen etter forespørselen.

request();

Filen din skal nå se slik ut:

import fetch from "node-fetch";
import { config } from "dotenv";

config();

const apiKey = process.env.API_KEY;
const host = "google.com";

async function request() {
  const response = await fetch("https://api.tipsbilk.net.com/dnsrecord", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": apiKey,
    },
    body: JSON.stringify({ url: host, types: ["A"] }),
  });

  if (response.ok) {
    const { data } = await response.json();

    console.log(data.A);
  } else {
    console.log(response);
  }
}

request();

Og å kjøre det skriptet med node with-fetch.js bør produsere følgende utdata:

[
  { address: '172.253.122.113', ttl: 134 },
  { address: '172.253.122.138', ttl: 134 },
  { address: '172.253.122.100', ttl: 134 },
  { address: '172.253.122.139', ttl: 134 },
  { address: '172.253.122.102', ttl: 134 },
  { address: '172.253.122.101', ttl: 134 }
]

Axios

Til slutt skal vi bruke Axios for å få tilgang til tipsbilk.net API. For å begynne, la oss importere dotenv- og axios-pakkene.

import axios from "axios";
import { config } from "dotenv";

La oss deretter kalle config-funksjonen for å sette opp miljøvariabler. La oss i tillegg lagre vertens navn og API-nøkkelen i separate konstanter.

const host = "google.com";
const key = process.env.API_KEY;

La oss nå lagre URL-en til API-endepunktet i en annen konstant

const url = "https://api.tipsbilk.net.com/dnsrecord";

La oss deretter lagre dataene som vil bli sendt som en del av forespørselskroppen i en annen konstant

const data = { url: host, types: ["A"] };

Da vil den siste tingen å gjøre før du sender ut forespørselen være å også lagre metaalternativene, for eksempel overskrifter, i en annen konstant.

const options = {
  headers: {
    "Content-Type": "application/json",
    "x-api-key": key,
  },
};

Til slutt, la oss kalle postfunksjonen vi importerte tidligere, og sende inn url-, data- og alternativvariablene vi definerte tidligere som argumenter. Fordi dette vil returnere et løfte, kan du deretter bruke deretter til å håndtere svaret når det eventuelt returneres.

axios.post(url, data, options).then(({ data }) => {
  console.log(data.data.A);
});

På slutten av alt dette skal koden i with-axios-filen se slik ut:

import axios from "axios";
import { config } from "dotenv";

config();
const host = "google.com";
const key = process.env.API_KEY;

const url = "https://api.tipsbilk.net.com/dnsrecord";
const data = { url: host, types: ["A"] };
const options = {
  headers: {
    "Content-Type": "application/json",
    "x-api-key": key,
  },
};

axios.post(url, data, options).then(({ data }) => {
  console.log(data.data.A);
});

Og når du kjører skriptet ved å bruke node with-axios.js, skal det vise følgende utdata:

[
  { address: '142.251.163.138', ttl: 60 },
  { address: '142.251.163.113', ttl: 60 },
  { address: '142.251.163.100', ttl: 60 },
  { address: '142.251.163.101', ttl: 60 },
  { address: '142.251.163.102', ttl: 60 },
  { address: '142.251.163.139', ttl: 60 }
]

Siste ord

I dette innlegget har vi laget manuset med tre forskjellige tilnærminger. Målet med dette var å fremheve hvor enkelt det er å bruke tipsbilk.net API, og hvordan vi kan gå frem for å bruke det i Javascript, nærmere bestemt NodeJS.

  avtale et møte og sende invitasjoner

Utforsk tipsbilk.net API-dokumentasjon for mer.