如何在 JavaScript (NodeJS) 中使用 Geekflare DNS 查找 API

已發表: 2022-10-07

在本教程中,我將演示如何在 NodeJS 中使用 Geekflare API 來檢查任何域的 DNS 記錄。

我們將構建一個簡單的腳本,該腳本在執行時會打印出 Google 搜索服務器的 IP 地址。

該腳本將使用 Geekflare DNS Lookup API。

為了構建它,我們將使用三種方法,第一種使用 NodeJS 中內置的https模塊。 第二個將使用node-fetch模塊。 然後最後將使用axios客戶端庫。

什麼是 Geekflare API?

Geekflare API 為網站性能、DNS 和安全指標測試提供了一套 REST API。 你可以做一些事情,比如截屏、生成 PDF、進行網絡抓取、端口掃描等等。

先決條件

要學習本教程,您需要了解 JavaScript,包括 Promise 和 ES6 語法。 至於軟件,你應該安裝 NodeJS 和一個文本編輯器,比如 Visual Studio Code。

發出請求時,您將需要一個 Geekflare 帳戶來獲取用於身份驗證的 API 密鑰。 要獲得一個,請前往 API 登錄頁面並創建一個免費帳戶。

創建帳戶後,您應該被重定向到儀表板,您可以在其中找到您的 API 密鑰。

Geekflare-Dashboard-2

建設項目

首先,創建一個項目文件夾並使用您選擇的終端打開它,然後運行以下命令。

 npm init -y

上述命令會將項目目錄初始化為 NodeJS 項目。

接下來,運行下面的命令,這將為我們的項目安裝所有依賴項

npm install dotenv axios node-fetch

成功安裝依賴後,在項目根文件夾中創建三個腳本vanilla.jswith-axios.jswith-fetch.js和一個.env文件來存儲我們的環境變量。

最後,項目根目錄應如下所示:

截圖來自 2022-10-06-10-27-03

接下來,打開.env文件並使用以下代碼行添加您的 Geekflare API 密鑰:

 API_KEY=<api key>

<API key>替換為您的實際 API 密鑰。

香草.js

NodeJS 有一個內置的httphttps模塊,我們可以使用它來發出客戶端請求。 我們將首先使用這種方法。

打開vanilla.js文件並在頂部添加以下代碼行以導入項目的依賴項。

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

接下來,我們將調用config()函數來加載環境變量。 然後我們將 API 密鑰和主機名存儲在變量中。

 config(); const apiKey = process.env.API_KEY; const host = 'google.com';

當我們在 NodeJS 中調用 request 函數來啟動一個 HTTP 請求時,我們需要為我們想要連接的主機和端點、我們將要使用的 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); });

data 變量只是一個字符串,我們將在其中存儲服務器的 JSON 響應,因為它會流回給我們。

為了實際存儲數據,我們將監聽響應對象的on data事件。 每當觸發此事件時,我們都會將服務器發送的數據塊附加到 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.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";

然後調用 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 }

在函數體內,我們需要調用之前從node-fetch包中導入的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。 首先,讓我們導入dotenvaxios包。

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

接下來,讓我們調用config函數來設置環境變量。 此外,讓我們將主機名和 API 密鑰存儲在單獨的常量中。

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

現在,讓我們將 API 端點的 URL 存儲在另一個常量中

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函數,傳入我們之前定義的urldataoptions變量作為參數。 因為這將返回一個承諾,所以您可以在最終返回時使用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 文檔了解更多信息。