互联网上是否有可靠的 Web 服务可以返回当前 Unix (UTC) 时间戳?
一个可行的解决方法可能是使用通过 HTTP 响应获得的响应标头。在像我这样的罕见情况下,当您无法直接访问 Web 服务器并且无法自己创建 API 时,您可以发送 XHR 并使用
获取响应标头response.getAllResponseHeaders()
然后解析返回字符串中的
date
值。当然,您必须相信服务器日期。
我知道这是一个罕见的(也许是愚蠢的)用例,但它可能会发生。
这是一个如何使用 Python 可靠地获取它的示例,它可以轻松地移植到几乎任何语言:
from contextlib import closing
from socket import socket, AF_INET, SOCK_DGRAM
import struct
import time
NTP_PACKET_FORMAT = "!12I"
NTP_DELTA = 2208988800 # 1970-01-01 00:00:00
NTP_QUERY = b'\x1b' + 47 * b'\0'
def ntp_time(host="pool.ntp.org", port=123):
with closing(socket( AF_INET, SOCK_DGRAM)) as s:
s.sendto(NTP_QUERY, (host, port))
msg, address = s.recvfrom(1024)
unpacked = struct.unpack(NTP_PACKET_FORMAT,
msg[0:struct.calcsize(NTP_PACKET_FORMAT)])
return unpacked[10] + float(unpacked[11]) / 2**32 - NTP_DELTA
其中
ntp_time()
返回当前 UTC Unix 时间戳,包括微秒。