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.
últimas postagens
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
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.
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.
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.
Explore a documentação da API etechpt.com para saber mais.