Как использовать Geekflare DNS Lookup API в JavaScript (NodeJS)
Опубликовано: 2022-10-07В этом руководстве я собираюсь продемонстрировать, как использовать API Geekflare в NodeJS для проверки записей DNS любого домена.
Мы собираемся создать простой скрипт, который при выполнении выводит IP-адрес поискового сервера Google.
Этот скрипт будет использовать API Geekflare DNS Lookup.
Для его создания мы собираемся использовать три подхода, первый использует встроенный модуль https
в NodeJS. Второй будет использовать модуль node-fetch
. Тогда последний будет использовать клиентскую библиотеку axios
.
Что такое API Geekflare?
Geekflare API предлагает наборы REST API для тестирования производительности веб-сайтов, DNS и показателей безопасности. Вы можете делать такие вещи, как делать снимки экрана, создавать PDF-файлы, выполнять веб-скрейпинг, сканирование портов и многое другое.
Предпосылки
Чтобы следовать этому руководству, вам потребуется понимание JavaScript, включая промисы и синтаксис ES6. Что касается программного обеспечения, у вас должны быть установлены NodeJS и текстовый редактор, например Visual Studio Code.
Вам понадобится учетная запись Geekflare, чтобы получить ключ API для аутентификации при выполнении запросов. Чтобы получить его, перейдите на целевую страницу API и создайте бесплатную учетную запись.
После создания учетной записи вы должны быть перенаправлены на панель инструментов, где вы найдете свой ключ API.

Создание проекта
Для начала создайте папку проекта и откройте ее с помощью терминала по вашему выбору, затем выполните приведенную ниже команду.
npm init -y
Приведенная выше команда инициализирует каталог проекта как проект NodeJS.
Далее выполните приведенную ниже команду, которая установит все зависимости для нашего проекта.
npm install dotenv axios node-fetch
После успешной установки зависимостей создайте три сценария в корневой папке проекта, а именно vanilla.js
, with-axios.js
, with-fetch.js
и файл .env
для хранения наших переменных среды.
В итоге корень проекта должен выглядеть так:

Затем откройте файл .env
и добавьте свой ключ API Geekflare со следующей строкой кода:
API_KEY=<api key>
Замените <API key>
вашим фактическим ключом 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.geekflare.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.geekflare.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 });
Как видите, функция запроса принимает два аргумента. Первый — это объект параметров, который мы определили ранее. Вторая — это функция обратного вызова, которая будет обрабатывать ответ от сервера. Внутри функции обратного вызова мы можем добавить прослушиватели событий, когда сервер отправляет данные, заканчивает отправку данных или отправляет ошибку.
Чтобы добавить различные обработчики ответов, добавьте следующие строки кода в функцию обратного вызова:
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); });
Переменная данных — это просто строка, в которой мы собираемся хранить ответ сервера в формате JSON, когда он возвращается к нам.
Чтобы на самом деле сохранить данные, мы собираемся прослушивать событие ответа объекта on data
. Всякий раз, когда это событие запускается, мы будем добавлять фрагмент данных, отправленных сервером, к переменной данных.
Затем, чтобы, наконец, использовать данные, мы будем прослушивать событие on 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.geekflare.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
, откройте файл with-fetch.js
и добавьте следующие импорты вверху.
import fetch from "node-fetch"; import { config } from "dotenv";
Затем вызовите функцию конфигурации, чтобы настроить переменные среды и установить константы для 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.geekflare.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.geekflare.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 для доступа к Geekflare 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.geekflare.com/dnsrecord";
Далее давайте сохраним данные, которые будут отправлены как часть тела запроса, в другой константе.
const data = { url: host, types: ["A"] };
Тогда последнее, что нужно сделать перед отправкой запроса, — это также сохранить мета-параметры, такие как заголовки, в другой константе.
const options = { headers: { "Content-Type": "application/json", "x-api-key": key, }, };
Наконец, давайте вызовем функцию post
, которую мы импортировали ранее, передав переменные url
, data
и options
, которые мы определили ранее в качестве аргументов. Поскольку это вернет обещание, вы можете использовать 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.geekflare.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 } ]
Заключительные слова
В этом посте мы создали скрипт с тремя разными подходами. Цель этого состояла в том, чтобы показать, насколько просто использовать Geekflare API и как мы можем использовать его в Javascript, особенно в NodeJS.
Изучите документацию Geekflare API, чтобы узнать больше.