。
我正在尝试使用以下代码通过whois查找大约10,000个域。
async def lookup(server, port, query, sema):
async with sema as sema:
try:
reader, writer = await asyncio.open_connection(server, port)
except:
return {}
writer.write(query.encode("ISO-8859-1"))
await writer.drain()
data = b""
while True:
d = await reader.read(4096)
if not d:
break
data += d
writer.close()
data = data.decode("ISO-8859-1")
return data
但是,我反复收到错误"连接失败"。如果我尝试一次查找,它就会通过,这意味着whois服务器已启动。我还将 ulimit 增加到 10,000,但我使用信号量一次将查找限制为仅 1000
whois 服务器几乎可以肯定是限制您的速率的。并非所有 whois 服务器都可以从单个 IP 地址扩展到 1000 个并发连接。
进一步限制速率、降低信号量限制或切换到漏水的存储桶速率限制器。
或者,寻找提供更高查询率选项的 whois API 提供商,或者更好的是,支持批量查询。