如何在 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 密鑰。

建設項目
首先,創建一個項目文件夾並使用您選擇的終端打開它,然後運行以下命令。
npm init -y
上述命令會將項目目錄初始化為 NodeJS 項目。
接下來,運行下面的命令,這將為我們的項目安裝所有依賴項
npm install dotenv axios node-fetch
成功安裝依賴後,在項目根文件夾中創建三個腳本vanilla.js
, with-axios.js
, with-fetch.js
和一個.env
文件來存儲我們的環境變量。
最後,項目根目錄應如下所示:

接下來,打開.env
文件並使用以下代碼行添加您的 Geekflare API 密鑰:
API_KEY=<api key>
將<API key>
替換為您的實際 API 密鑰。
香草.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';
當我們在 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。 首先,讓我們導入dotenv
和axios
包。
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
函數,傳入我們之前定義的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 文檔了解更多信息。