Як використовувати techukraine.net DNS Lookup API у JavaScript (NodeJS)

У цьому посібнику я збираюся продемонструвати, як використовувати techukraine.net API у NodeJS для перевірки записів DNS будь-якого домену.

Ми збираємося створити простий сценарій, який під час виконання друкує IP-адресу пошукового сервера Google.

Цей сценарій використовуватиме techukraine.net DNS Lookup API.

Щоб створити його, ми будемо використовувати три підходи, перший використовує вбудований модуль https у NodeJS. Другий використовуватиме модуль node-fetch. Тоді останній використовуватиме клієнтську бібліотеку axios.

Що таке techukraine.net API?

techukraine.net API пропонує набори REST API для тестування продуктивності веб-сайту, DNS і показників безпеки. Ви можете робити такі речі, як знімок екрана, генерувати PDF-файли, робити веб-скрапінг, сканувати порти та багато іншого.

передумови

Щоб дотримуватися цього підручника, вам знадобиться розуміння JavaScript, включаючи обіцянки та синтаксис ES6. Що стосується програмного забезпечення, у вас повинен бути встановлений NodeJS і текстовий редактор, наприклад Visual Studio Code.

Вам знадобиться обліковий запис techukraine.net, щоб отримати ключ API для автентифікації під час виконання запитів. Щоб отримати його, перейдіть на цільову сторінку API та створіть безкоштовний обліковий запис.

Після створення облікового запису вас буде перенаправлено на інформаційну панель, де ви знайдете свій ключ API.

Побудова проекту

Для початку створіть папку проекту та відкрийте її за допомогою терміналу за вашим вибором, а потім виконайте наведену нижче команду.

npm init -y

Наведена вище команда ініціалізує каталог проекту як проект NodeJS.

Далі виконайте наведену нижче команду, яка встановить усі залежності для нашого проекту

npm install dotenv axios node-fetch

Після успішного встановлення залежностей створіть три сценарії в кореневій папці проекту, а саме vanilla.js, with-axios.js, with-fetch.js і файл .env для зберігання наших змінних середовища.

Зрештою корінь проекту має виглядати так:

Далі відкрийте файл .env і додайте ключ API techukraine.net із таким рядком коду:

API_KEY=<api key>

Замініть <ключ API> на ваш справжній ключ API.

Vanilla.js

NodeJS має вбудований модуль http і https, який ми можемо використовувати для надсилання клієнтських запитів. Ми збираємося використовувати цей підхід спочатку.

Відкрийте файл vanilla.js і додайте наступні рядки коду вгорі, щоб імпортувати залежності проекту.

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

Далі ми викличемо функцію config(), щоб завантажити змінні середовища. Потім ми збираємося зберегти ключ API та ім’я хоста у змінних.

config();

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

Коли ми викликаємо функцію запиту для запуску HTTP-запиту в NodeJS, нам потрібно буде надати параметри для хоста та кінцевої точки, до яких ми хочемо підключитися, метод HTTP, який ми будемо використовувати, і заголовки для запиту. Отже, далі ми створимо змінну, яка буде зберігати ці параметри.

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

Поки що код у файлі vanilla.js виглядає так:

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

config();

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

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

Тепер ми можемо продовжити виклик функції запиту, передавши метод options:

const req = request(options, response => {

  // we are going to add response handlers here

});

Як бачите, функція запиту приймає два аргументи. Перший — об’єкт параметрів, який ми визначили раніше. Друга — функція зворотного виклику, яка оброблятиме відповідь від сервера. Усередині функції зворотного виклику ми можемо додати слухачі подій, коли сервер надсилає дані, завершує надсилання даних або надсилає помилку.

  Як встановити перехресні посилання на клітинки між електронними таблицями Microsoft Excel

Щоб додати різні обробники відповідей, додайте такі рядки коду всередину функції зворотного виклику:

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);
});

Змінна data — це просто рядок, у якому ми збираємося зберігати відповідь сервера в форматі JSON, коли вона повертається до нас.

Щоб фактично зберегти дані, ми будемо слухати об’єкт відповіді на подію даних. Щоразу, коли запускається ця подія, ми збираємося додавати фрагмент даних, надісланий сервером, до змінної data.

Потім, щоб остаточно використати дані, ми збираємося прослухати подію on end на об’єкті відповіді. Це буде викликано, коли всі дані буде надіслано з сервера, і він закінчив свою відповідь.

Нарешті, ми збираємося прослуховувати помилки та реєструвати їх на консолі, якщо вони виникнуть.

Тому виклик функції запиту має виглядати так

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();

У підсумку файл повинен виглядати так:

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

config();

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

const options = {
  hostname: "api.techukraine.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();

Тепер, якщо ви повернетеся до терміналу та запустите сценарій за допомогою команди node vanilla.js, ви повинні отримати наступний результат.

[
  { 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 }
]

Ось і все для першої частини. Очевидним недоліком використання вбудованих модулів HTTP/S є багатослівність. Клієнтські бібліотеки, такі як node-fetch, допоможуть вам створити ту саму програму, але з більш чітким і лаконічним кодом.

  Як синхронізувати відтворення відео на Netflix під час перегляду з друзями

вибірка вузла

Щоб створити той самий сценарій, але з node-fetch, відкрийте файл with-fetch.js і додайте наведені нижче імпортовані файли.

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

Потім викличте функцію config, щоб налаштувати змінні середовища та встановити константи для API_KEY і хоста, чиї записи A ми будемо запитувати.

config();

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

Далі ми збираємося визначити функцію для здійснення виклику API. Ця функція буде асинхронною.

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

Усередині тіла функції нам потрібно викликати функцію fetch, яку ми імпортували раніше з пакета node-fetch.

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

Тоді після виклику функції fetch ми хочемо проаналізувати нашу відповідь і обробити будь-які помилки, які можуть виникнути.

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

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

На цьому етапі додайте виклик функції після її запиту.

request();

Тепер ваш файл має виглядати так:

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.techukraine.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();

І запуск цього сценарію з вузлом with-fetch.js повинен створити такий результат:

[
  { 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 для доступу до techukraine.net API. Для початку давайте імпортуємо пакунки dotenv і axios.

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

Далі викличемо функцію config, щоб налаштувати змінні середовища. Крім того, давайте збережемо ім’я хоста та ключ API в окремих константах.

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

Тепер давайте збережемо URL-адресу кінцевої точки API в іншій константі

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

Далі давайте збережемо дані, які будуть надіслані як частина тіла запиту, в іншій константі

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

Тоді останнє, що потрібно зробити перед надсиланням запиту, це також зберегти мета-параметри, такі як заголовки, в іншій константі.

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

Нарешті, давайте зробимо виклик функції post, яку ми імпортували раніше, передавши URL-адресу, дані та змінні параметрів, які ми визначили раніше як аргументи. Оскільки це поверне обіцянку, ви можете використовувати then для обробки відповіді, коли вона зрештою буде повернена.

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

Наприкінці всього цього код у файлі with-axios має виглядати так:

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

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

const url = "https://api.techukraine.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);
});

І коли ви запускаєте сценарій за допомогою node with-axios.js, він має відобразити такий результат:

[
  { 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 }
]

Заключні слова

У цій публікації ми створили сценарій за допомогою трьох різних підходів. Мета цього полягала в тому, щоб підкреслити, наскільки легко використовувати techukraine.net API, і як ми можемо використовувати його в Javascript, зокрема NodeJS.

  Пояснення протоколів комп’ютерної мережі, основні типи

Перегляньте документацію techukraine.net API, щоб дізнатися більше.