JavaScript(NodeJS)에서 koreantech.org DNS 조회 API를 사용하는 방법

이 자습서에서는 NodeJS에서 koreantech.org API를 사용하여 모든 도메인의 DNS 레코드를 확인하는 방법을 보여줍니다.

우리는 실행될 때 Google 검색 서버의 IP 주소를 출력하는 간단한 스크립트를 만들 것입니다.

이 스크립트는 koreantech.org DNS 조회 API를 사용합니다.

그것을 빌드하기 위해 우리는 세 가지 접근 방식을 사용할 것입니다. 첫 번째는 NodeJS에 내장된 https 모듈을 사용하는 것입니다. 두 번째는 node-fetch 모듈을 사용합니다. 그런 다음 마지막은 axios 클라이언트 라이브러리를 사용합니다.

koreantech.org API란 무엇입니까?

koreantech.org API는 웹사이트 성능, DNS 및 보안 메트릭 테스트를 위한 REST API 세트를 제공합니다. 스크린샷 찍기, PDF 생성, 웹 스크래핑, 포트 스캔 등의 작업을 수행할 수 있습니다.

전제 조건

이 자습서를 따르려면 약속 및 ES6 구문을 포함하여 JavaScript에 대한 이해가 필요합니다. 소프트웨어의 경우 NodeJS와 Visual Studio Code와 같은 텍스트 편집기가 설치되어 있어야 합니다.

요청할 때 인증을 위한 API 키를 얻으려면 koreantech.org 계정이 필요합니다. 하나를 얻으려면 API 랜딩 페이지로 이동하여 무료 계정을 만드십시오.

계정을 만든 후에는 API 키를 찾을 수 있는 대시보드로 리디렉션되어야 합니다.

프로젝트 구축

시작하려면 프로젝트 폴더를 만들고 선택한 터미널로 연 다음 아래 명령을 실행합니다.

npm init -y

위의 명령은 프로젝트 디렉토리를 NodeJS 프로젝트로 초기화합니다.

다음으로 아래 명령을 실행하여 프로젝트에 대한 모든 종속성을 설치합니다.

npm install dotenv axios node-fetch

종속성이 성공적으로 설치된 후 프로젝트 루트 폴더에 세 개의 스크립트, 즉 바닐라.js, with-axios.js, with-fetch.js 및 .env 파일을 생성하여 환경 변수를 저장합니다.

결국 프로젝트 루트는 다음과 같아야 합니다.

다음으로, .env 파일을 열고 다음 코드 줄을 사용하여 koreantech.org API 키를 추가합니다.

API_KEY=<api key>

를 실제 API 키로 바꾸십시오.

바닐라.js

NodeJS에는 클라이언트 요청을 만드는 데 사용할 수 있는 내장 http 및 https 모듈이 있습니다. 우리는 먼저 이 방법을 사용할 것입니다.

바닐라.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.koreantech.org.com",
  path: "/dnsrecord",
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": apiKey,
  },
};

지금까지 바닐라.js 파일의 코드는 다음과 같습니다.

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

config();

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

const options = {
  hostname: "api.koreantech.org.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

});

보시다시피 요청 함수는 두 개의 인수를 취합니다. 첫 번째는 앞서 정의한 options 객체입니다. 두 번째는 서버의 응답을 처리하는 콜백 함수입니다. 콜백 함수 내에서 서버가 데이터 전송, 데이터 전송 완료 또는 오류 전송에 대한 이벤트 리스너를 추가할 수 있습니다.

  Linux를 위한 5가지 최고의 네트워크 모니터링 도구

다른 응답 핸들러를 추가하려면 콜백 함수 내에 다음 코드 줄을 추가하십시오.

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 응답을 저장할 문자열입니다.

실제로 데이터를 저장하기 위해 응답 객체의 on data 이벤트를 수신합니다. 이 이벤트가 발생할 때마다 서버에서 보낸 데이터 청크를 데이터 변수에 추가합니다.

그런 다음 마지막으로 데이터를 사용하기 위해 응답 개체에서 종료 이벤트를 수신합니다. 모든 데이터가 서버에서 전송되고 응답이 종료되면 호출됩니다.

마지막으로 오류를 수신하고 오류가 발생하면 콘솔에 기록합니다.

따라서 요청 함수에 대한 호출은 다음과 같아야 합니다.

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.koreantech.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와 같은 클라이언트 라이브러리는 동일한 프로그램을 생성하는 데 도움이 되지만 더 명확하고 간결한 코드를 제공합니다.

  금지되었을 때 새 Tinder 계정을 만드는 방법

노드 가져오기

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.koreantech.org.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.koreantech.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를 사용하여 koreantech.org 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.koreantech.org.com/dnsrecord";

다음으로 요청 본문의 일부로 보낼 데이터를 다른 상수에 저장해 보겠습니다.

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

그런 다음 요청을 보내기 전에 마지막으로 해야 할 일은 헤더와 같은 메타 옵션도 다른 상수에 저장하는 것입니다.

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

마지막으로 이전에 가져온 post 함수를 호출하여 이전에 인수로 정의한 url, 데이터 및 옵션 변수를 전달해 보겠습니다. 이렇게 하면 약속이 반환되므로 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.koreantech.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);
});

그리고 노드 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 }
]

마지막 단어

이 게시물에서는 세 가지 다른 접근 방식으로 스크립트를 만들었습니다. 이 작업의 목적은 koreantech.org API를 사용하는 것이 얼마나 쉬운지, 그리고 Javascript, 특히 NodeJS에서 이를 사용하는 방법을 강조하는 것이었습니다.

  9 애플리케이션을 위한 최고의 관리형 MySQL 호스팅 플랫폼

자세한 내용은 koreantech.org API 설명서를 살펴보세요.