You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效查询50000个域名的可用性及价格?

高效批量查询域名可用性及价格方案

问题分析

你之前采用的WHOIS串行查询效率极低,核心原因有两点:

  • WHOIS服务器普遍存在请求频率限制,单线程逐个请求极易触发限流,导致超时或失败;
  • 50000条域名串行查询,即使单条请求仅耗时1秒,总耗时也超过13小时,完全不具备实用性。
    names.com批量工具无法使用,可转向以下更可靠的方案。

可行解决方案

1. 优先使用注册商官方API

主流域名注册商(如GoDaddy、Namecheap等)均提供批量查询API,这类API不仅查询速度快,还能直接返回域名可用性及注册/续费价格,是最优选择。

以Python异步调用为例,使用aiohttp实现批量请求(需替换为目标注册商的API密钥及接口):

import aiohttp
import asyncio

async def batch_check_api(session, domain_batch):
    api_url = "https://api.target-registrar.com/v1/domain/check"
    payload = {"domains": domain_batch, "include_pricing": True}
    headers = {"Authorization": "Bearer YOUR_API_KEY"}
    async with session.post(api_url, json=payload) as resp:
        result = await resp.json()
        return [
            {
                "domain": item["domain"],
                "available": item["available"],
                "price": item.get("registration_price")
            }
            for item in result["data"]
        ]

async def run_batch_query(domain_list, batch_size=100):
    async with aiohttp.ClientSession() as session:
        tasks = []
        # 按批次拆分域名列表,避免单次请求数据量过大
        for i in range(0, len(domain_list), batch_size):
            batch = domain_list[i:i+batch_size]
            tasks.append(batch_check_api(session, batch))
        # 并发执行所有批次请求
        all_results = await asyncio.gather(*tasks)
        # 合并结果并过滤可注册域名
        registrable_domains = []
        for batch_result in all_results:
            registrable_domains.extend([d for d in batch_result if d["available"]])
        return registrable_domains

# 使用示例
your_domain_list = ["presumptuous.ly", "principaliti.es", ...]  # 替换为你的50000条域名
available_with_price = asyncio.run(run_batch_query(your_domain_list))

注意:不同注册商的API参数、批量大小限制及返回格式存在差异,需参考对应官方文档调整;同时务必妥善保管API密钥。

2. 异步优化WHOIS查询(仅当无法使用API时)

若必须依赖WHOIS查询,可通过异步请求+并发控制提升效率,使用aiowhois库实现:

import asyncio
from aiowhois import WHOISClient

async def check_single_domain(domain):
    client = WHOISClient()
    try:
        whois_result = await client.query(domain)
        # 不同域名后缀的WHOIS返回格式存在差异,需根据实际情况调整判断逻辑
        available = "status" not in whois_result or whois_result["status"] == "free"
        return {"domain": domain, "available": available}
    except Exception as e:
        print(f"查询{domain}出错: {str(e)}")
        return {"domain": domain, "available": False}

async def batch_whois_query(domain_list, max_concurrent=20):
    # 用信号量控制并发数,避免触发WHOIS服务器限流
    semaphore = asyncio.Semaphore(max_concurrent)
    async def bounded_check(domain):
        async with semaphore:
            return await check_single_domain(domain)
    
    tasks = [bounded_check(domain) for domain in domain_list]
    all_results = await asyncio.gather(*tasks)
    return [res for res in all_results if res["available"]]

# 使用示例
your_domain_list = ["presumptuous.ly", "principaliti.es", ...]
available_domains = asyncio.run(batch_whois_query(your_domain_list))

该方式比串行查询效率提升10-20倍,但仍不如注册商API,且部分WHOIS服务器可能拦截高频请求,需根据实际情况调整并发数。

3. DNS预筛选+API查价结合

先用高性能DNS工具(如massdns)快速排除已注册域名,再对剩余域名查询价格,大幅减少后续查询量:

  1. DNS预筛选:通过查询域名SOA记录判断是否已注册(无SOA记录通常表示域名未被注册)
    • 命令示例:massdns -r resolvers.txt -t SOA -l your_domain_list.txt -o S
    • 解析输出结果,筛选出无SOA记录的域名,形成待查价格的小列表
  2. API查价:将筛选后的域名列表通过注册商API查询具体价格

这种方式能快速排除90%以上的已注册域名,大幅降低后续查询的工作量。

内容的提问来源于stack exchange,提问作者gnarbarian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:16:30