كيفية استخدام admingate.org DNS Lookup API في JavaScript (NodeJS)

في هذا البرنامج التعليمي ، سأشرح كيفية استخدام واجهة برمجة تطبيقات admingate.org في NodeJS للتحقق من سجلات DNS لأي مجال.

سنقوم ببناء برنامج نصي بسيط يقوم ، عند تنفيذه ، بطباعة عنوان IP لخادم بحث Google.

سيستخدم هذا البرنامج النصي admingate.org DNS Lookup API.

لإنشائه ، سنستخدم ثلاث طرق ، الأولى تستخدم وحدة https المضمنة في NodeJS. والثاني سوف يستخدم وحدة جلب العقدة. ثم سيستخدم الأخير مكتبة العميل axios.

ما هي واجهة برمجة تطبيقات admingate.org؟

تقدم admingate.org API مجموعات من واجهات برمجة تطبيقات REST لأداء موقع الويب واختبار مقاييس الأمان ونظام أسماء النطاقات. يمكنك القيام بأشياء مثل التقاط لقطة شاشة وإنشاء ملفات PDF والقيام بكشط الويب ومسح المنافذ وغير ذلك الكثير.

المتطلبات الأساسية

لمتابعة هذا البرنامج التعليمي ، ستحتاج إلى فهم JavaScript ، بما في ذلك الوعود وبناء جملة ES6. بالنسبة للبرنامج ، يجب أن يكون لديك NodeJS ومحرر نصوص مثل Visual Studio Code مثبتًا.

ستحتاج إلى حساب admingate.org للحصول على مفتاح API للمصادقة عند تقديم الطلبات. للحصول على واحد ، توجه إلى صفحة API المقصودة وأنشئ حسابًا مجانيًا.

بعد إنشاء الحساب ، يجب إعادة توجيهك إلى لوحة التحكم ، حيث ستجد مفتاح API الخاص بك.

بناء المشروع

للبدء ، قم بإنشاء مجلد مشروع وافتحه باستخدام محطة طرفية من اختيارك ، ثم قم بتشغيل الأمر أدناه.

npm init -y

سيقوم الأمر أعلاه بتهيئة دليل المشروع كمشروع NodeJS.

بعد ذلك ، قم بتشغيل الأمر أدناه ، والذي سيقوم بتثبيت جميع التبعيات لمشروعنا

npm install dotenv axios node-fetch

بعد تثبيت التبعيات بنجاح ، قم بإنشاء ثلاثة نصوص في المجلد الجذر للمشروع وهي vanilla.js و axios.js و with-fetch.js وملف .env لتخزين متغيراتنا البيئية.

في النهاية ، يجب أن يبدو جذر المشروع كما يلي:

بعد ذلك ، افتح ملف .env وأضف مفتاح admingate.org API الخاص بك باستخدام السطر التالي من التعليمات البرمجية:

API_KEY=<api key>

استبدل <مفتاح API> بمفتاح 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.admingate.org.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.admingate.org.com",
  path: "/dnsrecord",
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": apiKey,
  },
};

الآن يمكننا المضي قدمًا في استدعاء وظيفة الطلب التي تمر في طريقة الخيارات:

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 للخادم حيث يتم دفقها إلينا مرة أخرى.

لتخزين البيانات فعليًا ، سنستمع إلى كائن الاستجابة في حدث البيانات. عندما يتم تشغيل هذا الحدث ، سنقوم بإلحاق جزء كبير من البيانات التي يرسلها الخادم إلى متغير البيانات.

ثم لاستخدام البيانات أخيرًا ، سنستمع إلى حدث النهاية على كائن الاستجابة. سيتم استدعاء هذا عندما يتم إرسال جميع البيانات من الخادم ، وينتهي رده.

أخيرًا ، سنستمع إلى الأخطاء ونسجلها في وحدة التحكم إذا ظهرت.

لذلك يجب أن يبدو استدعاء وظيفة الطلب على هذا النحو

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.admingate.org.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 في إنشاء نفس البرنامج ولكن برمز أكثر وضوحًا وإيجازًا.

  أفضل 8 برامج مخططات بيرت لمديري المشاريع

عقدة الجلب

لإنشاء البرنامج النصي نفسه ولكن باستخدام 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
}

داخل جسم الوظيفة ، نحتاج إلى استدعاء وظيفة الجلب التي قمنا باستيرادها سابقًا من حزمة node-fetch.

const response = await fetch("https://api.admingate.org.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();

يجب أن يبدو ملفك الآن كما يلي:

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.admingate.org.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();

وتشغيل هذا النص البرمجي باستخدام العقدة 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 للوصول إلى واجهة برمجة تطبيقات admingate.org. للبدء ، دعنا نستورد حزم dotenv و axios.

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

بعد ذلك ، دعنا نسمي دالة التكوين لإعداد المتغيرات البيئية. بالإضافة إلى ذلك ، دعنا نخزن اسم المضيف ومفتاح API في ثوابت منفصلة.

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

الآن ، دعنا نخزن عنوان URL لنقطة نهاية API في ثابت آخر

const url = "https://api.admingate.org.com/dnsrecord";

بعد ذلك ، دعنا نخزن البيانات التي سيتم إرسالها كجزء من نص الطلب في ثابت آخر

const data = { url: host, types: ["A"] };

بعد ذلك ، سيكون آخر ما يجب فعله قبل إرسال الطلب هو تخزين خيارات التعريف أيضًا ، مثل الرؤوس ، في ثابت آخر.

const options = {
  headers: {
    "Content-Type": "application/json",
    "x-api-key": key,
  },
};

أخيرًا ، لنقم باستدعاء وظيفة النشر التي قمنا باستيرادها سابقًا ، لتمرير عنوان url ، ومتغيرات البيانات والخيارات التي حددناها سابقًا كوسائط. نظرًا لأن هذا سيعيد الوعد ، يمكنك بعد ذلك استخدامه للتعامل مع الاستجابة عند إعادتها في النهاية.

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.admingate.org.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);
});

وعند تشغيل البرنامج النصي باستخدام العقدة مع 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 }
]

الكلمات الأخيرة

في هذا المنشور ، أنشأنا النص بثلاث طرق مختلفة. كان الهدف من ذلك هو إبراز مدى سهولة استخدام واجهة برمجة تطبيقات admingate.org ، وكيف يمكننا استخدامها في جافا سكريبت ، وتحديدًا NodeJS.

  كيفية الحصول على ملصق الوقت في سناب شات

استكشف وثائق admingate.org API للمزيد.