JavaScript'te Geekflare DNS Arama API'sı Nasıl Kullanılır (NodeJS)

Yayınlanan: 2022-10-07

Bu eğitimde, herhangi bir etki alanının DNS kayıtlarını kontrol etmek için NodeJS'de Geekflare API'sinin nasıl kullanılacağını göstereceğim.

Yürütüldüğünde Google'ın Arama sunucusunun IP adresini yazdıran basit bir komut dosyası oluşturacağız.

Bu komut dosyası Geekflare DNS Arama API'sini kullanacak.

Bunu oluşturmak için üç yaklaşım kullanacağız, ilki NodeJS'de yerleşik https modülünü kullanıyor. İkincisi, node-fetch modülünü kullanacaktır. Sonra sonuncusu axios istemci kitaplığını kullanacak.

Geekflare API'si nedir?

Geekflare API, web sitesi performansı, DNS ve güvenlik ölçümleri testi için REST API takımları sunar. Ekran görüntüsü alma, PDF oluşturma, web'de kazıma, bağlantı noktası taraması ve çok daha fazlasını yapmak gibi şeyler yapabilirsiniz.

Önkoşullar

Bu öğreticiyi takip etmek için sözler ve ES6 sözdizimi dahil olmak üzere JavaScript'i anlamanız gerekir. Yazılıma gelince, NodeJS ve Visual Studio Code gibi bir metin düzenleyicinin kurulu olması gerekir.

İstek yaparken kimlik doğrulaması için bir API anahtarı almak için bir Geekflare hesabına ihtiyacınız olacak. Bir tane almak için API açılış sayfasına gidin ve ücretsiz bir hesap oluşturun.

Hesabı oluşturduktan sonra, API anahtarınızı bulacağınız kontrol paneline yönlendirilmelisiniz.

Geekflare-Dashboard-2

Projeyi inşa etmek

Başlamak için bir proje klasörü oluşturun ve seçtiğiniz bir terminal ile açın, ardından aşağıdaki komutu çalıştırın.

 npm init -y

Yukarıdaki komut, proje dizinini bir NodeJS projesi olarak başlatacaktır.

Ardından, projemiz için tüm bağımlılıkları kuracak olan aşağıdaki komutu çalıştırın.

 npm install dotenv axios node-fetch

Bağımlılıklar başarıyla yüklendikten sonra, proje kök klasöründe vanilla.js , with with-axios.js , with-fetch.js ve çevresel değişkenlerimizi saklamak için bir .env dosyası olmak üzere üç komut dosyası oluşturun.

Sonunda, proje kökü şöyle görünmelidir:

Ekran görüntüsü-from-2022-10-06-10-27-03

Ardından, .env dosyasını açın ve aşağıdaki kod satırıyla Geekflare API anahtarınızı ekleyin:

 API_KEY=<api key>

<API key> gerçek API anahtarınızla değiştirin.

Vanilla.js

NodeJS, istemci isteklerini yapmak için kullanabileceğimiz yerleşik bir http ve https modülüne sahiptir. İlk önce bu yaklaşımı kullanacağız.

Vanilla.js dosyasını açın ve projenin bağımlılıklarını içe aktarmak için en üste aşağıdaki kod satırlarını ekleyin.

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

Ardından, çevresel değişkenleri yüklemek için config() işlevini çağıracağız. Ardından API anahtarını ve ana bilgisayar adını değişkenlerde saklayacağız.

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

NodeJS'de bir HTTP isteği başlatmak için request işlevini çağırdığımızda, bağlanmak istediğimiz ana bilgisayar ve uç nokta, kullanacağımız HTTP yöntemi ve istek için başlıklar için seçenekler sağlamamız gerekecek. Şimdi, bu seçenekleri saklayacak bir değişken oluşturacağız.

 const options = { hostname: "api.geekflare.com", path: "/dnsrecord", method: "POST", headers: { "Content-Type": "application/json", "x-api-key": apiKey, }, };

Şimdiye kadar, vanilla.js dosyasındaki kod şuna benziyor:

 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, }, };

Şimdi seçenekler yönteminden geçerek istek işlevini çağırmaya devam edebiliriz:

 const req = request(options, response => { // we are going to add response handlers here });

Gördüğünüz gibi request işlevi iki argüman alır. Birincisi daha önce tanımladığımız seçenekler nesnesidir. İkincisi, sunucudan gelen yanıtı işleyecek bir geri arama işlevidir. Geri arama işlevinin içine, sunucunun veri gönderdiği, veri göndermeyi bitirdiği veya bir hata gönderdiği durumlar için olay dinleyicileri ekleyebiliriz.

Farklı yanıt işleyicileri eklemek için geri arama işlevinin içine aşağıdaki kod satırlarını ekleyin:

 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); });

Veri değişkeni, sunucunun JSON yanıtını bize geri gönderilirken depolayacağımız bir dizedir.

Verileri gerçekten depolamak için, yanıt nesnesinin on data olayını dinleyeceğiz. Bu olay tetiklendiğinde, sunucu tarafından gönderilen veri yığınını veri değişkenine ekleyeceğiz.

Son olarak verileri kullanmak için, yanıt nesnesindeki on end olayını dinleyeceğiz. Bu, sunucudan tüm veriler gönderildiğinde ve yanıtını sonlandırdığında çağrılır.

Son olarak, hataları dinleyeceğiz ve ortaya çıkarsa bunları konsola kaydedeceğiz.

Bu nedenle, istek işlevine yapılan çağrı şöyle görünmelidir

 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); }); });

Son olarak, istek gövdesine bazı veriler yazmamız ve isteği sonlandırmamız gerekiyor.

 req.write(JSON.stringify({ url: host, types: ["A"] })); req.end();

Sonunda, dosya şöyle görünmelidir:

 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();

Şimdi, terminale geri dönerseniz ve node vanilla.js komutunu kullanarak betiği çalıştırırsanız, aşağıdaki çıktıyı almalısınız.

 [ { 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 } ]

İlk bölüm için bu kadar. Yerleşik HTTP/S modüllerini kullanmanın bariz dezavantajı, ayrıntılı olmasıdır. node-fetch gibi istemci kitaplıkları, aynı programı daha net ve daha özlü kodla oluşturmanıza yardımcı olacaktır.

düğüm getirme

Aynı betiği node-fetch ile oluşturmak için, with-fetch.js dosyasını açın ve aşağıdaki içe aktarmaları en üste ekleyin.

 import fetch from "node-fetch"; import { config } from "dotenv";

Ardından, API_KEY ve A kayıtlarını isteyeceğimiz ana bilgisayar için çevresel değişkenleri yapılandırmak ve sabitleri ayarlamak için yapılandırma işlevini çağırın.

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

Ardından, API çağrısı yapmak için bir fonksiyon tanımlayacağız. Bu fonksiyon asenkron olacaktır.

 async function request() { // The function body will go here }

Fonksiyonun gövdesi içinde, daha önce node-fetch paketinden import ettiğimiz fetch fonksiyonunu çağırmamız gerekiyor.

 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"] }), });

Ardından, fetch işlevine yapılan çağrıdan sonra, yanıtımızı ayrıştırmak ve ortaya çıkabilecek hataları ele almak isteriz.

 if (response.ok) { const { data } = await response.json(); console.log(data.A); } else { console.log(response); }

Bu noktada, isteğinden sonra işleve bir çağrı ekleyin.

 request();

Dosyanız şimdi şöyle görünmelidir:

 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();

Ve bu betiği with node with-fetch.js çalıştırmak aşağıdaki çıktıyı üretmelidir:

 [ { 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 } ]

aksiyolar

Son olarak, Geekflare API'sine erişmek için Axios'u kullanacağız. Başlamak için dotenv ve axios paketlerini içe aktaralım.

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

Ardından, çevresel değişkenleri ayarlamak için config işlevini çağıralım. Ek olarak, ana bilgisayarın adını ve API Anahtarını ayrı sabitlerde depolayalım.

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

Şimdi API bitiş noktasının URL'sini başka bir sabitte saklayalım

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

Ardından, istek gövdesinin bir parçası olarak gönderilecek verileri başka bir sabitte saklayalım.

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

Ardından, isteği göndermeden önce yapılacak son şey, başlıklar gibi meta seçenekleri de başka bir sabitte saklamak olacaktır.

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

Son olarak, daha önce tanımladığımız url , data ve options değişkenlerini argüman olarak ileterek, daha önce içe aktardığımız post işlevine çağrı yapalım. Bu bir söz vereceğinden, daha sonra, sonunda geri döndüğünde yanıtı işlemek için then kullanabilirsiniz.

 axios.post(url, data, options).then(({ data }) => { console.log(data.data.A); });

Tüm bunların sonunda, with-axios dosyasındaki kod şöyle görünmelidir:

 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); });

Ve betiği node with-axios.js kullanarak çalıştırdığınızda, aşağıdaki çıktıyı göstermelidir:

 [ { 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 } ]

Son sözler

Bu yazıda, senaryoyu üç farklı yaklaşımla oluşturduk. Bunun amacı, Geekflare API'sini kullanmanın ne kadar kolay olduğunu ve onu Javascript'te, özellikle NodeJS'de nasıl kullanabileceğimizi vurgulamaktı.

Daha fazlası için Geekflare API belgelerini keşfedin.