Bruke tipsbilk.net API for DNS-oppslag i NodeJS
Denne veiledningen viser hvordan du bruker tipsbilk.net API i NodeJS for å undersøke DNS-poster for et hvilket som helst domene. Vi skal utvikle et enkelt skript som, når det aktiveres, viser IP-adressen til Googles søkeserver. Dette skriptet benytter seg av tipsbilk.net DNS Lookup API. Vi skal utforske tre metoder for å oppnå dette. Den første metoden bruker den innebygde https-modulen i NodeJS. Den andre metoden benytter node-fetch modulen, og den siste metoden bruker axios-klientbiblioteket.
Hva er tipsbilk.net API?
tipsbilk.net API er en samling REST API-er som tilbyr funksjoner for testing av ytelse, DNS og sikkerhet for nettsteder. Dette inkluderer funksjonalitet som å ta skjermbilder, generere PDF-filer, utføre webskraping, portskanning og mye mer.
Nødvendige forberedelser
For å følge denne opplæringen, bør du ha grunnleggende kunnskaper om JavaScript, inkludert bruk av promises og ES6-syntaks. På programvaresiden, sørg for at NodeJS og en teksteditor som Visual Studio Code er installert. Du må også ha en tipsbilk.net-konto for å generere en API-nøkkel som kreves for autentisering når du sender forespørsler. Du kan opprette en gratis konto på API-landingssiden.
Etter å ha opprettet kontoen, vil du bli ledet til et dashbord hvor du finner API-nøkkelen din.
Prosjektoppsett
For å starte, opprett en ny prosjektmappe og åpne den i en terminal. Kjør deretter følgende kommando:
npm init -y
Dette vil initialisere prosjektmappen som et NodeJS-prosjekt.
Deretter kjører du følgende kommando for å installere nødvendige avhengigheter:
npm install dotenv axios node-fetch
Etter at avhengighetene er installert, oppretter du tre JavaScript-filer i prosjektets rotmappe, kalt vanilla.js, with-axios.js, og with-fetch.js, i tillegg til en .env-fil for å lagre miljøvariablene våre.
Prosjektstrukturen din bør da se slik ut:
Åpne .env-filen og legg til din tipsbilk.net API-nøkkel på følgende måte:
API_KEY=<din api-nøkkel>
Bytt ut <din api-nøkkel> med din faktiske API-nøkkel.
Vanilla.js
NodeJS har en innebygd http- og https-modul som vi kan benytte for å sende klientforespørsler. Vi starter med denne tilnærmingen.
Åpne vanilla.js-filen og legg til følgende linjer øverst for å importere de nødvendige modulene:
import { request } from "https"; import { config } from "dotenv";
Deretter kaller vi config()-funksjonen for å laste inn miljøvariabler. Så lagrer vi API-nøkkelen og vertsnavnet i separate variabler.
config(); const apiKey = process.env.API_KEY; const host="google.com";
Når vi bruker request-funksjonen for å utføre en HTTP-forespørsel, må vi spesifisere verten, endepunktet, HTTP-metoden, og overskriftene for forespørselen. Vi oppretter derfor en variabel for å 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 skal vanilla.js-filen din 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, }, };
Nå kan vi bruke request-funksjonen og sende inn alternativene:
const req = request(options, response => { // Responsbehandlere vil bli lagt til her });
request-funksjonen tar to argumenter. Det første er alternativobjektet vi definerte, og det andre er en callback-funksjon som håndterer svaret fra serveren. Inne i denne callback-funksjonen kan vi legge til hendelseslyttere for når serveren sender data, fullfører sendingen, eller sender en feil.
For å legge til responsbehandlerne, bruk følgende kode i callback-funksjonen:
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 en streng der vi lagrer serverens JSON-svar. Vi lytter til «data»-hendelsen på response-objektet for å legge til datablokkene sendt fra serveren til datavariabelen. Deretter lytter vi til «end»-hendelsen for å behandle dataene etter at all data er mottatt. Til slutt håndterer vi eventuelle feil ved å lytte til «error»-hendelsen.
Kallingen til request-funksjonen skal nå 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 sende data til forespørselen og avslutte den:
req.write(JSON.stringify({ url: host, types: ["A"] })); req.end();
Den fullstendige vanilla.js-filen skal nå 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();
Hvis du nå kjører skriptet med kommandoen «node vanilla.js» i terminalen, bør du få følgende output:
[ { 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 } ]
Dette avslutter den første delen. Ulempen ved å bruke de innebygde HTTP/S-modulene er at det kan være omstendelig. Klientbiblioteker som node-fetch kan hjelpe deg med å oppnå det samme, men med mer oversiktlig kode.
node-fetch
For å oppnå det samme med node-fetch, åpne with-fetch.js og legg til følgende import øverst:
import fetch from "node-fetch"; import { config } from "dotenv";
Deretter kaller du config-funksjonen og konfigurerer konstanter for API_KEY og verten:
config(); const apiKey = process.env.API_KEY; const host="google.com"
Definer deretter en asynkron funksjon for å utføre API-kallet:
async function request() { // Funksjonskroppen legges til her }
Inne i funksjonen bruker vi fetch-funksjonen fra node-fetch:
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"] }), });
Etter fetch-kallet analyserer vi svaret og håndterer eventuelle feil:
if (response.ok) { const { data } = await response.json(); console.log(data.A); } else { console.log(response); }
Legg så til et kall 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();
Kjøring av skriptet med «node with-fetch.js» bør gi følgende output:
[ { 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 bruker vi Axios for å få tilgang til tipsbilk.net API. Vi importerer dotenv og axios-pakkene:
import axios from "axios"; import { config } from "dotenv";
Vi kaller config-funksjonen og definerer konstanter for vert og API-nøkkel:
const host = "google.com"; const key = process.env.API_KEY;
Lagre API-endepunktets URL i en egen konstant:
const url = "https://api.tipsbilk.net.com/dnsrecord";
Lagre dataene som sendes som en del av forespørselen i en annen konstant:
const data = { url: host, types: ["A"] };
Lagre metaalternativene, som overskriftene, i en annen konstant:
const options = { headers: { "Content-Type": "application/json", "x-api-key": key, }, };
Til slutt bruker vi axios.post-funksjonen og sender inn url, data, og options. Bruk then for å håndtere svaret:
axios.post(url, data, options).then(({ data }) => { console.log(data.data.A); });
Den fullstendige koden i with-axios.js skal 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); });
Når du kjører skriptet med «node with-axios.js», skal det vise følgende output:
[ { 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 } ]
Oppsummering
I dette innlegget har vi utviklet et skript med tre forskjellige tilnærminger. Målet var å demonstrere hvor enkelt det er å bruke tipsbilk.net API i JavaScript, spesielt i NodeJS. Utforsk tipsbilk.net API-dokumentasjonen for å lære mer.