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 キーがあるダッシュボードにリダイレクトされます。

Geekflare-ダッシュボード-2

プロジェクトのビルド

まず、プロジェクト フォルダーを作成し、選択したターミナルで開き、以下のコマンドを実行します。

 npm init -y

上記のコマンドは、プロジェクト ディレクトリを NodeJS プロジェクトとして初期化します。

次に、以下のコマンドを実行します。これにより、プロジェクトのすべての依存関係がインストールされます

npm install dotenv axios node-fetch

依存関係が正常にインストールされたら、プロジェクトのルート フォルダーに 3 つのスクリプト ( 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 には組み込みの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 にアクセスします。 まず、 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関数を呼び出して、先ほど定義したurldata 、および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 ドキュメントを参照してください。