JavaScript (NodeJS) で Geekflare DNS Lookup API を使用する方法
公開: 2022-10-07このチュートリアルでは、NodeJS で Geekflare API を使用して任意のドメインの DNS レコードをチェックする方法を紹介します。
実行すると、Google の検索サーバーの IP アドレスを出力する簡単なスクリプトを作成します。
このスクリプトは Geekflare DNS Lookup API を使用します。
それを構築するには、3 つの方法を使用します。最初の方法では、NodeJS に組み込まれているhttps
モジュールを使用します。 2 つ目はnode-fetch
モジュールを使用します。 次に、最後にaxios
クライアント ライブラリを使用します。
Geekflare API とは何ですか?
Geekflare API は、Web サイトのパフォーマンス、DNS、およびセキュリティ メトリクス テスト用の一連の REST API を提供します。 スクリーンショットの撮影、PDF の生成、Web スクレイピング、ポート スキャンなど、さまざまなことができます。
前提条件
このチュートリアルに従うには、Promise や ES6 構文など、JavaScript を理解している必要があります。 ソフトウェアに関しては、NodeJS と Visual Studio Code などのテキスト エディターがインストールされている必要があります。
リクエストを行う際に認証用の API キーを取得するには、Geekflare アカウントが必要です。 取得するには、API のランディング ページにアクセスして、無料のアカウントを作成してください。
アカウントを作成すると、API キーがあるダッシュボードにリダイレクトされます。

プロジェクトのビルド
まず、プロジェクト フォルダーを作成し、選択したターミナルで開き、以下のコマンドを実行します。
npm init -y
上記のコマンドは、プロジェクト ディレクトリを NodeJS プロジェクトとして初期化します。
次に、以下のコマンドを実行します。これにより、プロジェクトのすべての依存関係がインストールされます
npm install dotenv axios node-fetch
依存関係が正常にインストールされたら、プロジェクトのルート フォルダーに 3 つのスクリプト ( 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 でリクエスト関数を呼び出して 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 メソッドを渡して request 関数を呼び出すことができます。
const req = request(options, response => { // we are going to add response handlers here });
ご覧のとおり、request 関数は 2 つの引数を取ります。 1 つ目は、前に定義した options オブジェクトです。 2 つ目は、サーバーからの応答を処理するコールバック関数です。 コールバック関数内に、サーバーがデータを送信したとき、データの送信を終了したとき、またはエラーを送信したときのイベント リスナーを追加できます。
さまざまな応答ハンドラーを追加するには、コールバック関数内に次のコード行を追加します。
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
変数を引数として渡します。 これは promise を返すため、最終的に返されたときに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 } ]
最後の言葉
この投稿では、3 つの異なるアプローチでスクリプトを作成しました。 これの目的は、Geekflare API の使用がいかに簡単か、そして Javascript、特に NodeJS でどのように使用できるかを強調することでした。
詳細については、Geekflare API ドキュメントを参照してください。