PAYATHON 2026

WHOIS 不返回 .eu 域名的注册、到期和更新日期,该如何获取?

数据阿明

结论

如果 whois.eu:43 的完整原始响应没有注册、到期或更新日期,更换 Python WHOIS 库也无法补出这些字段。

自有域名应优先通过注册商控制台查询日期。需要自动化时,可以确认注册商是否提供可授权访问的 API。对于他人的 .eu 域名,不能保证存在公开、可自动查询全部日期的接口。网页查询和端口 43 查询返回的字段也可能不同。

为什么代码没有报错,却拿不到日期?

示例通过 socket 发送域名,然后循环读取服务器响应,没有解析日期字段。需要先区分两种情况:

  • 原始响应包含日期,但某个 WHOIS 库没有解析出来:检查字段格式和解析规则。
  • 原始响应本身没有日期:需要更换数据来源,修改解析器没有作用。

没有错误或警告,只说明程序这次执行时没有抛出异常,不代表服务器返回了业务需要的所有字段。题目没有附上完整响应,因此无法仅凭代码确认具体返回了哪些内容。

recv(4096) 表示每次最多读取 4096 字节。原代码会持续读取,直到 recv() 返回空字节串,所以整个响应并没有被限制在 4096 字节以内。

先确认是否完整读取了 WHOIS 响应

下面的代码用于查看原始响应。它增加了超时设置,使用 sendall() 发送完整请求,并通过上下文管理器关闭连接。代码无法增加服务器没有提供的日期字段。

import socket


def get_raw_whois(domain, timeout=10):
    chunks = []

    with socket.create_connection(("whois.eu", 43), timeout=timeout) as s:
        s.sendall((domain + "\r\n").encode("utf-8"))

        while True:
            data = s.recv(4096)
            if not data:
                break
            chunks.append(data)

    return b"".join(chunks).decode("utf-8")


print(get_raw_whois("example.eu"))

timeout=10 是示例中的超时设置,可以根据网络条件调整。如果发生超时,应将本次查询标记为失败,不要误判为“查询成功但日期为空”。

提问中粘贴的代码缺少 Python 必需的缩进。如果实际运行的脚本正常,可能是粘贴时丢失了格式;上面的示例已补齐缩进。

如何获取需要的日期?

自己管理的域名:向注册商查询

登录购买或管理该域名的注册商账户,查看域名详情中的到期时间、续费时间和可用的注册记录。如果要自动生成续费提醒,可以向注册商确认:

  1. 是否提供域名详情 API,以及是否支持 .eu。
  2. API 凭据是否有权读取目标域名。
  3. 返回的日期分别代表注册局到期时间、账户续费截止时间,还是其他业务时间。
  4. 是否提供注册日期和最后更新日期,以及“更新”具体指哪类变更。

EURid 的续费帮助建议联系注册商,确认域名何时到期以及到期后的处理方式,因为不同注册商可能采用不同政策。EURid:如何及何时续费域名

注册日期、到期日期和更新日期应分别处理。接口提供到期日期,不意味着它也提供另外两个字段。

他人的域名:以公开查询实际披露的内容为准

可以按正常流程使用 EURid 的网页 WHOIS,查看页面是否披露所需日期。题目已经排除了网页抓取,因此这只能用于人工查询,不能作为现有脚本的自动化方案。

EURid 的帮助说明,网页 WHOIS 查询可能要求完成 CAPTCHA。EURid:如何查询域名关联的 name servers

如果公开渠道没有提供日期,可以联系注册商或 EURid,询问是否有适用于该用途的数据访问方式。但不能预设对方会披露第三方域名的日期,或提供批量查询权限。

使用其他 API 前:确认数据来源和覆盖范围

换用 RDAP 或第三方域名查询 API 前,需要确认服务支持 .eu,并且实际返回目标日期字段。协议或接口名称本身不能保证数据完整。

如果服务只能返回历史记录,还应检查采集时间。历史到期日期可能已经因续费或其他操作而改变,不适合作为当前续费提醒的唯一依据。

日期缺失时,程序应该怎么处理?

将日期保留为空值,并记录来源和缺失原因,例如“本次 WHOIS 响应未提供到期日期”。网络错误、查询失败和字段未披露应分别记录。

不要用注册日期加一年推算当前到期日期。EURid 的规则允许不同的注册年限,并规定了续期机制,仅有注册日期不足以确定当前注册期限。EURid:域名规则

用于续费管理时,还应分别保存注册局到期时间和注册商要求的付款或续费截止时间,避免提醒时间选错。

备注:内容仅供参考。