DNS-Such-API: Abfrage von A-, MX- und TXT-Einträgen über REST
Suchen Sie programmgesteuert nach DNS-Einträgen mit drei REST-Endpunkten. Fragen Sie einzelne Datensatztypen ab, bündeln Sie mehrere Typen und prüfen Sie die Weitergabe über Google, Cloudflare und Quad9.
Ihr Überwachungsskript muss MX-Einträge nach einer DNS-Migration überprüfen. Könnte man installieren
dig, analysieren Sie die mehrzeilige Ausgabe mit Regex und behandeln Sie die Dutzend Randfälle
wobei das Format je nach Datensatztyp variiert. Oder Sie könnten eine HTTP-Anfrage senden und erhalten
strukturiertes JSON zurück.
Die Botoi-DNS-API bietet Ihnen drei Endpunkte: Einzeltyp-Suche, Batch-Suche für mehrere Datensatztypen auf einmal und einen Ausbreitungsprüfer, der Google, Cloudflare und Quad9 abfragt parallel. Alle drei geben konsistentes JSON zurück, das Sie in jedes Skript oder jede Anwendung einspeisen können ohne Gymnastik zu analysieren.
Suchen Sie nach einem einzelnen Datensatztyp
Der /v1/dns/lookup Der Endpunkt benötigt eine Domäne und einen optionalen Datensatztyp. Wenn
Wenn Sie den Typ weglassen, werden standardmäßig A-Datensätze verwendet. Hier ist eine MX-Suche für stripe.com:
curl -X POST https://api.botoi.com/v1/dns/lookup \\
-H "Content-Type: application/json" \\
-d '{"domain": "stripe.com", "type": "MX"}'
Antwort:
{
"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
}
}
Jeder MX-Eintrag kommt mit einem zurück priority Feld und a ttl in
Sekunden. Sie müssen keine Zeichenfolgen aufteilen oder erraten, welche Zahl die Priorität hat. Die API tut es
das für dich.
TXT-Einträge für SPF und Verifizierung
TXT-Einträge enthalten SPF-Richtlinien, Domänenbesitz-Tokens und DKIM-Selektoren. Fragen Sie sie ab auf die gleiche Weise:
curl -X POST https://api.botoi.com/v1/dns/lookup \\
-H "Content-Type: application/json" \\
-d '{"domain": "github.com", "type": "TXT"}'
Antwort:
{
"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
}
}
Die API unterstützt acht Datensatztypen: A, AAAA, MX, TXT, CNAME, NS, SOA und PTR. Jeder
Typ gibt das gleiche strukturierte Format mit zurück type, value, Und
ttl Felder.
Fragen Sie mehrere Datensatztypen gleichzeitig ab
Vier separate HTTP-Aufrufe zum Abrufen von A-, MX-, TXT- und NS-Datensätzen sind verschwenderisch. Der
/v1/dns/batch Der Endpunkt führt alle Suchvorgänge parallel aus und gibt die zurück
Ergebnisse nach Typ gruppiert.
curl -X POST https://api.botoi.com/v1/dns/batch \\
-H "Content-Type: application/json" \\
-d '{"domain": "github.com", "types": ["A", "MX", "TXT", "NS"]}'
Antwort:
{
"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 }
]
}
}
}
Eine Anfrage, eine Antwort, alle vier Datensatztypen. Wenn Sie das weglassen types
Array ist der Endpunkt standardmäßig A, AAAA, MX, TXT und NS. Dies ist nützlich beim Bauen
Domain-Übersichts-Dashboards oder die Durchführung umfassender DNS-Audits.
Überprüfen Sie die DNS-Weitergabe über Resolver hinweg
Sie haben Ihren A-Eintrag vor 20 Minuten aktualisiert. Ihr lokaler Resolver zeigt die neue IP an, aber
Kunden in anderen Regionen nutzen immer noch den alten Server. Der /v1/dns/propagation
endpoint befragt drei große öffentliche Resolver und teilt Ihnen mit, ob sie einverstanden sind.
curl -X POST https://api.botoi.com/v1/dns/propagation \\
-H "Content-Type: application/json" \\
-d '{"domain": "stripe.com", "type": "A"}'
Antwort:
{
"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
}
}
Der consistent Feld ist true wenn alle drei Resolver die zurückgeben
denselben sortierten Satz von Datensätzen. Wenn es so ist false, Die resolvers Objekt
zeigt Ihnen genau, welcher Resolver noch veraltete Daten bereitstellt und wie lange jede Abfrage gedauert hat.
Praktisches Beispiel: Überprüfen Sie MX-Einträge, bevor Sie Anmeldungen annehmen
Ein häufiger Anwendungsfall: Jemand tritt ein user@typo-domain.cm in Ihrem Anmeldeformular.
Die Syntaxvalidierung ist erfolgreich, da das Format korrekt ist, die Domäne jedoch über keine Mailserver verfügt.
Sie werden dies drei Tage später feststellen, wenn die Willkommens-E-Mail zurückgesendet wird.
Dieses Node.js-Beispiel überprüft MX-Einträge zum Zeitpunkt der Anmeldung und lehnt den Verweis auf E-Mail-Adressen ab an Domains ohne Mail-Infrastruktur:
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);
Die Prüfung verlängert die Anmeldeanfrage um 10–30 ms. Das ist ein geringer Preis, um Absprungprobleme zu vermeiden Schaden für den Ruf Ihres Absenders. Sie können MX-Ergebnisse auch pro Domain 30 Minuten lang zwischenspeichern um wiederholte Suchen nach derselben Domain zu vermeiden.
Überwachen Sie die DNS-Weitergabe nach einer Migration
Nachdem Sie DNS-Einträge geändert haben, möchten Sie wissen, wann alle wichtigen Resolver die neuen bereitstellen Werte. Dieses Skript fragt alle 30 Sekunden den Ausbreitungsendpunkt ab und protokolliert den Status von jeder Resolver:
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");
Führen Sie dies als Hintergrundjob aus, nachdem Sie DNS-Änderungen vorgenommen haben. Es protokolliert die Datensätze von jedem Resolver bei jedem Versuch und wird beendet, wenn alle drei einverstanden sind. Das 30-Sekunden-Intervall hält Sie auf Trab unter dem Tariflimit des kostenlosen Kontingents (5 Anfragen pro Minute).
Wichtige Punkte
-
/v1/dns/lookupgibt strukturiertes JSON für jedes der acht unterstützten Elemente zurück Datensatztypen. MX-Einträge beinhalten Priorität; Zu den SOA-Datensätzen gehören Seriendaten, Aktualisierungen, Wiederholungsversuche usw. Ablaufdatum und Mindestfelder. -
/v1/dns/batchfragt mehrere Datensatztypen parallel mit einer Anfrage ab. Der Standardwert ist A, AAAA, MX, TXT und NS, wenn Sie nichts angeben. -
/v1/dns/propagationüberprüft Google, Cloudflare und Quad9 und gibt a zurück Boolescher WertconsistentFlagge. Verwenden Sie es, um zu überprüfen, ob DNS-Änderungen global erfolgt sind. -
Alle drei Endpunkte arbeiten anonym mit 5 Anforderungen/Minute. Übergeben Sie eine
X-Api-KeyÜberschrift für höhere Grenzwerte. - Die API läuft im Edge-Netzwerk von Cloudflare. Abfragen werden über DNS-over-HTTPS aufgelöst, Sie erhalten also die gleiche Zuverlässigkeit wie bei der direkten Abfrage von Cloudflare oder Google DNS, verpackt in einem entwicklerfreundlichen JSON-Format.
FAQ
- Wie suche ich programmgesteuert nach DNS-Einträgen?
- Senden Sie eine POST-Anfrage an https://api.botoi.com/v1/dns/lookup mit einem JSON-Text, der die Domäne und den Datensatztyp enthält. Die API gibt strukturiertes JSON mit allen übereinstimmenden Datensätzen, TTLs und Abfragezeiten zurück. Keine dig-Installation oder Ausgabeanalyse erforderlich.
- Welche DNS-Eintragstypen unterstützt die API?
- Die API unterstützt acht Datensatztypen: A, AAAA, MX, TXT, CNAME, NS, SOA und PTR. Wenn Sie den Typparameter weglassen, werden standardmäßig A-Datensätze verwendet.
- Wie überprüfe ich, ob DNS-Änderungen weitergegeben wurden?
- Verwenden Sie den Endpunkt /v1/dns/propagation. Es fragt Google DNS, Cloudflare DNS und Quad9 parallel ab und gibt einen „konsistenten“ booleschen Wert zurück, der angibt, ob alle drei Resolver dieselben Datensätze zurückgeben. Wenn konsistent den Wert „false“ hat, ist die Weitergabe noch im Gange.
- Kann ich mehrere DNS-Eintragstypen in einer Anfrage abfragen?
- Ja. Der /v1/dns/batch-Endpunkt akzeptiert ein Typenarray (z. B. ["A", "MX", "TXT"]) und fragt sie alle parallel ab. Die Antwort gruppiert Datensätze nach Typ. Wenn Sie den Parameter „types“ weglassen, werden standardmäßig A, AAAA, MX, TXT und NS verwendet.
- Ist die DNS-Lookup-API kostenlos?
- Der anonyme Zugriff ist mit 5 Anfragen pro Minute und 100 Anfragen pro Tag mit IP-basierter Ratenbegrenzung möglich. Kein API-Schlüssel oder Konto erforderlich. Für einen höheren Durchsatz beginnen kostenpflichtige Pläne bei 9 $/Monat mit einem einzigen API-Schlüssel, der alle über 150 Endpunkte abdeckt.
Starte mit botoi zu entwickeln
150+ API-Endpunkte für Abfragen, Textverarbeitung, Bildgenerierung und Entwickler-Tools. Kostenloser Tarif, keine Kreditkarte nötig.