API de recherche DNS : interrogez les enregistrements A, MX et TXT via REST
Recherchez les enregistrements DNS par programme avec 3 points de terminaison REST. Interrogez des types d'enregistrement uniques, regroupez plusieurs types et vérifiez la propagation sur Google, Cloudflare et Quad9.
Votre script de surveillance doit vérifier les enregistrements MX après une migration DNS. Vous pourriez installer
dig, analysez sa sortie multiligne avec regex et gérez la douzaine de cas extrêmes
où le format varie selon les types d'enregistrement. Ou vous pouvez envoyer une requête HTTP et obtenir
JSON structuré en arrière.
L'API DNS botoi vous offre trois points de terminaison : recherche d'un seul type, recherche par lots de plusieurs types d'enregistrement à la fois et un vérificateur de propagation qui interroge Google, Cloudflare et Quad9 en parallèle. Tous les trois renvoient un JSON cohérent que vous pouvez insérer dans n'importe quel script ou application sans analyser la gymnastique.
Rechercher un seul type d'enregistrement
La /v1/dns/lookup le point de terminaison prend un domaine et un type d'enregistrement facultatif. Si
vous omettez le type, la valeur par défaut est les enregistrements A. Voici une recherche MX pour stripe.com :
curl -X POST https://api.botoi.com/v1/dns/lookup \\
-H "Content-Type: application/json" \\
-d '{"domain": "stripe.com", "type": "MX"}'
Réponse:
{
"success": true,
"data": {
"domain": "stripe.com",
"type": "MX",
"records": [
{ "type": "MX", "value": "aspmx.l.google.com", "priority": 1, "ttl": 3600 },
{ "type": "MX", "value": "alt1.aspmx.l.google.com", "priority": 5, "ttl": 3600 },
{ "type": "MX", "value": "alt2.aspmx.l.google.com", "priority": 5, "ttl": 3600 },
{ "type": "MX", "value": "alt3.aspmx.l.google.com", "priority": 10, "ttl": 3600 },
{ "type": "MX", "value": "alt4.aspmx.l.google.com", "priority": 10, "ttl": 3600 }
],
"query_time_ms": 14
}
}
Chaque enregistrement MX revient avec un priority champ et un ttl dans
secondes. Pas besoin de diviser les chaînes ou de deviner quel numéro est la priorité ; l'API fait
ça pour toi.
Enregistrements TXT pour SPF et vérification
Les enregistrements TXT contiennent des politiques SPF, des jetons de propriété de domaine et des sélecteurs DKIM. Interrogez-les le de la même manière :
curl -X POST https://api.botoi.com/v1/dns/lookup \\
-H "Content-Type: application/json" \\
-d '{"domain": "github.com", "type": "TXT"}'
Réponse:
{
"success": true,
"data": {
"domain": "github.com",
"type": "TXT",
"records": [
{ "type": "TXT", "value": "v=spf1 ip4:192.30.252.0/22 include:_netblocks.google.com ~all", "ttl": 3600 },
{ "type": "TXT", "value": "MS=ms58704441", "ttl": 3600 },
{ "type": "TXT", "value": "docusign=087098e3-3d46-47b7-9b4e-8a23028154cd", "ttl": 3600 }
],
"query_time_ms": 11
}
}
L'API prend en charge huit types d'enregistrement : A, AAAA, MX, TXT, CNAME, NS, SOA et PTR. Chacun
type renvoie le même format structuré avec type, value, et
ttl champs.
Interroger plusieurs types d'enregistrements à la fois
Quatre appels HTTP distincts pour obtenir les enregistrements A, MX, TXT et NS sont un gaspillage. Le
/v1/dns/batch le point de terminaison exécute toutes les recherches en parallèle et renvoie le
résultats regroupés par type.
curl -X POST https://api.botoi.com/v1/dns/batch \\
-H "Content-Type: application/json" \\
-d '{"domain": "github.com", "types": ["A", "MX", "TXT", "NS"]}'
Réponse:
{
"success": true,
"data": {
"domain": "github.com",
"results": {
"A": [
{ "type": "A", "value": "140.82.121.3", "ttl": 60 }
],
"MX": [
{ "type": "MX", "value": "aspmx.l.google.com", "priority": 1, "ttl": 3600 },
{ "type": "MX", "value": "alt1.aspmx.l.google.com", "priority": 5, "ttl": 3600 },
{ "type": "MX", "value": "alt2.aspmx.l.google.com", "priority": 5, "ttl": 3600 }
],
"TXT": [
{ "type": "TXT", "value": "v=spf1 ip4:192.30.252.0/22 include:_netblocks.google.com ~all", "ttl": 3600 },
{ "type": "TXT", "value": "MS=ms58704441", "ttl": 3600 }
],
"NS": [
{ "type": "NS", "value": "dns1.p08.nsone.net", "ttl": 900 },
{ "type": "NS", "value": "dns2.p08.nsone.net", "ttl": 900 },
{ "type": "NS", "value": "dns3.p08.nsone.net", "ttl": 900 },
{ "type": "NS", "value": "dns4.p08.nsone.net", "ttl": 900 }
]
}
}
}
Une demande, une réponse, les quatre types d'enregistrement. Si vous omettez le types
tableau, le point de terminaison est par défaut A, AAAA, MX, TXT et NS. Ceci est utile pour construire
tableaux de bord de présentation du domaine ou exécution d’audits DNS complets.
Vérifier la propagation DNS entre les résolveurs
Vous avez mis à jour votre enregistrement A il y a 20 minutes. Votre résolveur local affiche la nouvelle IP, mais
les clients d’autres régions accèdent toujours à l’ancien serveur. Le /v1/dns/propagation
le point de terminaison interroge trois résolveurs publics majeurs et vous indique s'ils sont d'accord.
curl -X POST https://api.botoi.com/v1/dns/propagation \\
-H "Content-Type: application/json" \\
-d '{"domain": "stripe.com", "type": "A"}'
Réponse:
{
"success": true,
"data": {
"domain": "stripe.com",
"type": "A",
"resolvers": {
"google": {
"records": ["185.166.143.28", "185.166.143.29"],
"response_time_ms": 18
},
"cloudflare": {
"records": ["185.166.143.28", "185.166.143.29"],
"response_time_ms": 9
},
"quad9": {
"records": ["185.166.143.28", "185.166.143.29"],
"response_time_ms": 22
}
},
"consistent": true
}
}
La consistent le champ est true lorsque les trois résolveurs renvoient le
même ensemble d’enregistrements triés. Quand c'est false, la resolvers objet
vous montre exactement quel résolveur fournit toujours des données obsolètes et combien de temps a pris chaque requête.
Exemple pratique : vérifiez les enregistrements MX avant d'accepter les inscriptions
Un cas d'utilisation courant : quelqu'un entre user@typo-domain.cm dans votre formulaire d'inscription.
La validation de la syntaxe réussit car le format est correct, mais le domaine n'a pas de serveur de messagerie.
Vous le découvrirez trois jours plus tard lorsque l'e-mail de bienvenue rebondira.
Cet exemple Node.js vérifie les enregistrements MX au moment de l'inscription et rejette les adresses e-mail pointant vers vers des domaines sans infrastructure de messagerie :
import express from "express";
const app = express();
app.use(express.json());
async function lookupMx(domain) {
const res = await fetch("https://api.botoi.com/v1/dns/lookup", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": process.env.BOTOI_API_KEY,
},
body: JSON.stringify({ domain, type: "MX" }),
});
return res.json();
}
app.post("/signup", async (req, res) => {
const { email } = req.body;
const domain = email.split("@")[1];
// Check if the domain has MX records before accepting the signup
const { data } = await lookupMx(domain);
if (!data.records || data.records.length === 0) {
return res.status(422).json({
error: \`The domain \\\${domain} has no mail servers. Check the email address and try again.\`,
});
}
// MX records exist; proceed with signup
await createUser({ email });
res.status(201).json({ created: true });
});
app.listen(3000);
La vérification ajoute 10 à 30 ms à la demande d'inscription. C'est un petit prix pour éviter les rebonds atteinte à votre réputation d'expéditeur. Vous pouvez également mettre en cache les résultats MX par domaine pendant 30 minutes pour éviter les recherches répétées pour le même domaine.
Surveiller la propagation DNS après une migration
Après avoir modifié les enregistrements DNS, vous souhaitez savoir à quel moment tous les principaux résolveurs servent le nouveau valeurs. Ce script interroge le point de terminaison de propagation toutes les 30 secondes et enregistre l'état de chaque résolveur :
async function checkPropagation(domain, type) {
const res = await fetch("https://api.botoi.com/v1/dns/propagation", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": process.env.BOTOI_API_KEY,
},
body: JSON.stringify({ domain, type }),
});
return res.json();
}
// After updating DNS records, poll until all resolvers agree
async function waitForPropagation(domain, type, intervalMs = 30000) {
let attempts = 0;
while (attempts < 60) {
const { data } = await checkPropagation(domain, type);
console.log(
\`Attempt \\\${attempts + 1}: consistent=\\\${data.consistent}\`
);
for (const [name, info] of Object.entries(data.resolvers)) {
console.log(\` \\\${name}: \\\${JSON.stringify(info.records)}\`);
}
if (data.consistent) {
console.log("Propagation complete.");
return data;
}
attempts++;
await new Promise((r) => setTimeout(r, intervalMs));
}
throw new Error("Propagation did not complete within 30 minutes.");
}
// Usage
waitForPropagation("yourdomain.com", "A");
Exécutez-le en arrière-plan après avoir apporté des modifications DNS. Il enregistre les enregistrements de chacun résolveur à chaque tentative et quitte lorsque les trois sont d'accord. L'intervalle de 30 secondes vous permet sous la limite de débit du niveau gratuit (5 requêtes par minute).
Points clés
-
/v1/dns/lookuprenvoie du JSON structuré pour l'un des huit pris en charge types d'enregistrements. Les enregistrements MX incluent la priorité ; Les enregistrements SOA incluent les enregistrements série, actualisation, nouvelle tentative, expirer et les champs minimum. -
/v1/dns/batchinterroge plusieurs types d’enregistrements en parallèle avec une seule requête. La valeur par défaut est A, AAAA, MX, TXT et NS si vous ne le spécifiez pas. -
/v1/dns/propagationvérifie Google, Cloudflare et Quad9 et renvoie un booléenconsistentdrapeau. Utilisez-le pour vérifier que les modifications DNS sont devenues globales. -
Les trois points de terminaison fonctionnent de manière anonyme à 5 req/min. Passer un
X-Api-Keyen-tête pour des limites plus élevées. - L'API s'exécute sur le réseau périphérique de Cloudflare. Les requêtes sont résolues via DNS sur HTTPS, vous obtenez ainsi la même fiabilité que si vous interrogeiez directement Cloudflare ou Google DNS, encapsulé dans un format JSON convivial pour les développeurs.
FAQ
- Comment rechercher des enregistrements DNS par programmation ?
- Envoyez une requête POST à https://api.botoi.com/v1/dns/lookup avec un corps JSON contenant le domaine et le type d'enregistrement. L'API renvoie du JSON structuré avec tous les enregistrements correspondants, les durées de vie et l'heure de la requête. Aucune installation de fouille ou analyse de sortie requise.
- Quels types d’enregistrements DNS l’API prend-elle en charge ?
- L'API prend en charge huit types d'enregistrement : A, AAAA, MX, TXT, CNAME, NS, SOA et PTR. Si vous omettez le paramètre type, la valeur par défaut est les enregistrements A.
- Comment vérifier si les modifications DNS se sont propagées ?
- Utilisez le point de terminaison /v1/dns/propagation. Il interroge Google DNS, Cloudflare DNS et Quad9 en parallèle et renvoie un booléen « cohérent » indiquant si les trois résolveurs renvoient les mêmes enregistrements. Si cohérent est faux, la propagation est toujours en cours.
- Puis-je interroger plusieurs types d’enregistrements DNS en une seule requête ?
- Oui. Le point de terminaison /v1/dns/batch accepte un tableau de types (par exemple, ["A", "MX", "TXT"]) et les interroge tous en parallèle. La réponse regroupe les enregistrements par type. Si vous omettez le paramètre types, la valeur par défaut est A, AAAA, MX, TXT et NS.
- L’API de recherche DNS est-elle gratuite ?
- L'accès anonyme est disponible à 5 requêtes par minute et 100 requêtes par jour avec une limitation de débit basée sur IP. Aucune clé API ou compte requis. Pour un débit plus élevé, les forfaits payants commencent à 9 $/mois avec une seule clé API couvrant plus de 150 points de terminaison.
Commencez a construire avec botoi
150+ endpoints API pour la recherche, le traitement de texte, la generation d'images et les utilitaires pour developpeurs. Offre gratuite, sans carte bancaire.