Como usar a API de pesquisa de DNS etechpt.com em JavaScript (NodeJS)

Neste tutorial, vou demonstrar como usar a API etechpt.com no NodeJS para verificar os registros DNS de qualquer domínio.

Vamos construir um script simples que, quando executado, imprime o endereço IP do servidor de busca do Google.

Este script usará a API de pesquisa de DNS etechpt.com.

Para construí-lo, vamos usar três abordagens, a primeira usa o módulo https embutido no NodeJS. O segundo usará o módulo node-fetch. Em seguida, o último usará a biblioteca cliente axios.

O que é a API etechpt.com?

A API etechpt.com oferece conjuntos de APIs REST para testes de desempenho de sites, DNS e métricas de segurança. Você pode fazer coisas como tirar uma captura de tela, gerar PDFs, fazer web scraping, escanear portas e muito mais.

Pré-requisitos

Para seguir este tutorial, você precisará entender de JavaScript, incluindo promessas e sintaxe ES6. Quanto ao software, você deve ter o NodeJS e um editor de texto como o Visual Studio Code instalado.

Você precisará de uma conta etechpt.com para obter uma chave de API para autenticação ao fazer solicitações. Para obter um, vá para a página de destino da API e crie uma conta gratuita.

Depois de criar a conta, você deve ser redirecionado para o painel, onde encontrará sua chave de API.

Construindo o projeto

Para começar, crie uma pasta de projeto e abra-a com um terminal de sua escolha, depois execute o comando abaixo.

npm init -y

O comando acima inicializará o diretório do projeto como um projeto NodeJS.

Em seguida, execute o comando abaixo, que instalará todas as dependências do nosso projeto

npm install dotenv axios node-fetch

Depois que as dependências forem instaladas com sucesso, crie três scripts na pasta raiz do projeto, a saber, vanilla.js, with-axios.js, with-fetch.js e um arquivo .env para armazenar nossas variáveis ​​ambientais.

No final, a raiz do projeto deve ficar assim:

Em seguida, abra o arquivo .env e adicione sua chave de API etechpt.com com a seguinte linha de código:

API_KEY=<api key>

Substitua por sua chave de API real.

Baunilha.js

O NodeJS possui um módulo http e https embutido que podemos usar para fazer solicitações de clientes. Vamos usar essa abordagem primeiro.

Abra o arquivo vanilla.js e adicione as seguintes linhas de código na parte superior para importar as dependências do projeto.

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

Em seguida, vamos chamar a função config() para carregar variáveis ​​ambientais. Em seguida, vamos armazenar a chave da API e o nome do host em variáveis.

config();

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

Quando chamamos a função de solicitação para iniciar uma solicitação HTTP no NodeJS, precisaremos fornecer opções para o host e o endpoint ao qual queremos nos conectar, o método HTTP que usaremos e os cabeçalhos da solicitação. Então, a seguir, vamos criar uma variável que armazenará essas opções.

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

Até agora, o código no arquivo vanilla.js é assim:

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

config();

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

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

Agora podemos continuar a chamar a função request passando o método options:

const req = request(options, response => {

  // we are going to add response handlers here

});

Como você pode ver, a função de solicitação recebe dois argumentos. O primeiro é o objeto de opções que definimos anteriormente. A segunda é uma função de retorno de chamada que manipulará a resposta do servidor. Dentro da função callback, podemos adicionar ouvintes de eventos para quando o servidor enviar dados, terminar de enviar dados ou enviar um erro.

  9 melhores canais árabes no Kodi

Para adicionar os diferentes manipuladores de resposta, adicione as seguintes linhas de código dentro da função de retorno de chamada:

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

A variável de dados é simplesmente uma string onde vamos armazenar a resposta JSON do servidor à medida que ela é transmitida de volta para nós.

Para realmente armazenar os dados, vamos ouvir o evento on data do objeto de resposta. Sempre que esse evento for acionado, anexaremos o bloco de dados enviado pelo servidor à variável de dados.

Então, para finalmente usar os dados, vamos ouvir o evento on end no objeto de resposta. Isso será chamado quando todos os dados forem enviados do servidor e tiver finalizado sua resposta.

Por fim, vamos ouvir os erros e registrá-los no console, se surgirem.

Portanto, a chamada para a função de solicitação deve ficar assim

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

});

Por fim, precisamos gravar alguns dados no corpo da solicitação e encerrar a solicitação.

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

No final, o arquivo deve ficar assim:

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

config();

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

const options = {
  hostname: "api.etechpt.com.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();

Agora, se você voltar ao terminal e executar o script usando o comando node vanilla.js, deverá obter a seguinte saída.

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

É isso para a primeira parte. A desvantagem óbvia de usar os módulos HTTP/S integrados é que ele é detalhado. Bibliotecas de cliente, como node-fetch, ajudarão você a criar o mesmo programa, mas com um código mais claro e conciso.

  9 navegadores antidetecção/multilogin para experimentar

busca de nó

Para criar o mesmo script, mas com node-fetch, abra o arquivo with-fetch.js e adicione as seguintes importações ao topo.

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

Em seguida, chame a função config para configurar variáveis ​​ambientais e configurar constantes para a API_KEY e o host cujos registros A serão solicitados.

config();

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

Em seguida, vamos definir uma função para fazer a chamada da API. Esta função será assíncrona.

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

Dentro do corpo da função, precisamos chamar a função fetch que importamos anteriormente do pacote node-fetch.

const response = await fetch("https://api.etechpt.com.com/dnsrecord", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": apiKey,
    },
    body: JSON.stringify({ url: host, types: ["A"] }),
});

Então, após a chamada para a função de busca, gostaríamos de analisar nossa resposta e lidar com quaisquer erros que possam surgir.

if (response.ok) {
    const { data } = await response.json();

    console.log(data.A);
  } else {
    console.log(response);
  }

Neste ponto, adicione uma chamada à função após sua solicitação.

request();

Seu arquivo agora deve ficar assim:

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.etechpt.com.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();

E executar esse script com o nó with-fetch.js deve produzir a seguinte saída:

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

Por fim, usaremos o Axios para acessar a API etechpt.com. Para começar, vamos importar os pacotes dotenv e axios.

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

Em seguida, vamos chamar a função config para configurar as variáveis ​​ambientais. Além disso, vamos armazenar o nome do host e a API Key em constantes separadas.

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

Agora, vamos armazenar a URL do endpoint da API em outra constante

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

Em seguida, vamos armazenar os dados que serão enviados como parte do corpo da solicitação em outra constante

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

Então, a última coisa a fazer antes de enviar a solicitação será também armazenar as opções meta, como cabeçalhos, em outra constante.

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

Por fim, vamos fazer a chamada para a função post que importamos anteriormente, passando as variáveis ​​url, data e options que definimos anteriormente como argumentos. Como isso retornará uma promessa, você poderá usá-la para lidar com a resposta quando ela for retornada.

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

Ao final de tudo isso, o código no arquivo with-axios deve ficar assim:

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

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

const url = "https://api.etechpt.com.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);
});

E quando você executa o script usando o node with-axios.js, ele deve exibir a seguinte saída:

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

Palavras finais

Neste post, criamos o roteiro com três abordagens diferentes. O objetivo disso foi destacar como é fácil usar a API etechpt.com e como podemos usá-la em Javascript, especificamente NodeJS.

  Como criar conjuntos de dados aleatórios (falsos) no Microsoft Excel

Explore a documentação da API etechpt.com para saber mais.