如果必需的查询仍使用传统 WHOIS,只要代理策略允许向 WHOIS 服务发起 CONNECT,HTTP 代理就能承载这次 TCP 交互。客户端必须先完成代理握手,再发送查询文本。在未配置代理凭据的情况下做一次获准的公开 WHOIS 测试时,HTTP 代理列表提供了候选中间人;请另外确认其中一个允许访问 WHOIS 服务的主机和 43 端口。

对于名为 whois.example 的假设服务,先发出这条 HTTP 请求:

CONNECT whois.example:43 HTTP/1.1
Host: whois.example:43

HTTP 行尾要写成 CRLF。要读完整个代理响应,包括它结尾的空头行,并检查数字形式的成功状态。只收到状态行的一部分,不足以开始下一个协议。

然后发送 WHOIS 文本

隧道打开后,发送该 WHOIS 服务器所期望的查询。一个简单的示例查询是:

example.com<CRLF>

这个标记代表回车与换行字节。它不是域名的一部分。在这次 WHOIS 交互中,既没有 HTTP GET 行,也没有 HTTP 响应状态。

持续读取文本,直到 WHOIS 服务器关闭连接。响应可能包含很多行;第一个换行并不表示已经读完。在实现中要对连接与读取的等待设定上界。

这个顺序也给解析器带来两条不同的边界。先是一个 HTTP 头块。之后是 WHOIS 响应,它的完成由连接关闭来标志。解析边界之外已经缓冲的字节要保留下来,而不是把整次网络读取丢弃。

代理拒绝意味着隧道从未打开,因此之后再发送域名也无法得到 WHOIS 结果。如果服务器的应答指向另一个 WHOIS 服务,那么任何后续查询都需要单独获得对该服务的许可连接。

相关文章