Використання Techukraine.net API для перевірки DNS у NodeJS: Повний посібник
У цьому докладному керівництві ми розглянемо, як застосовувати techukraine.net API в середовищі NodeJS для отримання DNS-записів будь-якого домену. Ми створимо невеликий скрипт, який, будучи виконаним, виведе на екран IP-адреси, пов’язані з пошуковим сервером Google. Для цього ми задіємо DNS Lookup API від techukraine.net.
Щоб реалізувати задумане, ми скористаємося трьома різними методами. Перший базуватиметься на вбудованому в NodeJS модулі https. Другий метод передбачає використання модуля node-fetch. І, нарешті, третій підхід буде залежати від клієнтської бібліотеки axios.
Що являє собою techukraine.net API?
techukraine.net API надає набір REST API для проведення тестування продуктивності веб-сайтів, перевірки DNS та аналізу показників безпеки. За допомогою цього API можна, зокрема, створювати знімки екранів, генерувати PDF-файли, здійснювати веб-скрапінг, сканувати порти та виконувати багато інших корисних операцій.
Передумови
Для успішного проходження цього навчального посібника вам знадобиться розуміння основ JavaScript, включаючи роботу з промісами та синтаксис ES6. З точки зору програмного забезпечення, у вас має бути встановлений NodeJS та текстовий редактор, наприклад Visual Studio Code.
Вам також потрібен обліковий запис на techukraine.net, щоб отримати ключ API, необхідний для автентифікації при здійсненні запитів. Для цього необхідно перейти на сторінку API та зареєструвати безкоштовний акаунт.
Після створення облікового запису ви потрапите на інформаційну панель, де знайдете свій унікальний API ключ.
Створення проекту
На початку, створіть папку для проекту та відкрийте її у терміналі. Далі введіть наступну команду:
npm init -y
Ця команда ініціалізує папку як NodeJS-проєкт.
Наступним кроком буде встановлення залежностей для проєкту, виконавши команду:
npm install dotenv axios node-fetch
Після успішного встановлення всіх необхідних пакетів, створіть три JavaScript-файли у кореневій папці проекту: vanilla.js, with-axios.js, with-fetch.js та файл .env для зберігання змінних середовища.
Структура кореневої папки проекту має виглядати наступним чином:
Далі, відкрийте файл .env і додайте свій API-ключ від techukraine.net у наступному форматі:
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";
При використанні функції request для надсилання 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, }, };
Тепер ми можемо продовжити з викликом функції request, передавши в якості аргумента об’єкт options:
const req = request(options, response => { // обробники відповіді будуть додані тут });
Як бачите, функція request приймає два аргументи. Перший — це об’єкт параметрів, який ми визначили раніше. Другий — це callback-функція, яка буде обробляти відповідь від сервера. Всередині callback-функції ми можемо додати слухачі подій, коли сервер надсилає дані, завершує надсилання даних або повідомляє про помилку.
Щоб додати різні обробники відповіді, вставте наступний код всередину callback-функції:
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” об’єкта response. Кожного разу, коли ця подія спрацьовує, ми додаємо фрагмент даних від сервера до змінної data.
Потім, щоб використати отримані дані, ми будемо прослуховувати подію “end” об’єкта response. Вона буде викликана, коли всі дані будуть відправлені з сервера.
Нарешті, ми будемо прослуховувати помилки та виводити їх у консоль.
Таким чином, виклик функції request повинен виглядати наступним чином:
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, допоможуть створити таку ж програму, але з більш чітким та лаконічним кодом.
Node-fetch
Щоб створити аналогічний скрипт, але з використанням node-fetch, відкрийте файл with-fetch.js та додайте наступні import-и:
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() { // Тіло функції буде розміщено тут }
Всередині тіла функції, ми повинні викликати функцію 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();
І запуск цього скрипта за допомогою “node 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
Нарешті, ми будемо використовувати Axios для взаємодії з techukraine.net API. Спочатку імпортуємо пакети dotenv та axios.
import axios from "axios"; import { config } from "dotenv";
Далі викличемо функцію config для налаштування змінних середовища. Також збережемо ім’я хоста та ключ API у окремих константах.
config(); 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 для більш детальної інформації.