移动解析 HTTPDNS 编写自定义解析

自定义解析运行机制分为以下几个阶段,自定义解析允许你在这些执行阶段之间插入由你编写的云函数 SCF(Serverless)的函数逻辑,改变移动解析 HTTPDNS 的运行逻辑,进而实现自定义解析功能。如下图所示:
。

相关产品
移动解析 HTTPDNS 产品页,含版本规格、价格与购买入口。

一、自定义解析函数介绍

各执行阶段自定义解析函数功能说明如下:

阶段名 说明
BEFORE_WRITE_CACHE 1. 在写入缓存前,修改递归解析的结果。2. 根据上下文,替换默认缓存的 key 值。
BEFORE_WRITE_RESPONSE 在最终返回响应前,最后一次修改响应内容。注意:此阶段无论是否命中缓存,一定会被执行。

二、云函数输入与输出

移动解析 HTTPDNS 会将运行时上下文输入给 云函数 SCF(Serverless)服务 中的函数,允许自定义函数逻辑来处理这些数据,并将处理后的结果合并后返回至移动解析 HTTPDNS 的解析流程中。详情如下:

1. 获取客户端出口 IP 及其访问信息。

2. 修改域名解析结果及 TTL 值。

3. 添加自定义的数据输出,与解析结果一起返回。

三、示例代码

'use strict';exports.main_handler = async (event, context, callback) => { const body=event['body'] var params = null // 底层的类型是string if(typeof body === 'string') params = JSON.parse(body) else params = body var {domainName, clientIp, hookType, ttl, ips} = params //打印客户端出口IP的具体信息 //此处为示例代码,可以根据具体使用场景进行调整 var request = require('request'); const getIpInfo_url = 'http://cip.cc/' + params.clientIp; var IpInfo = null; request.post({url:getIpInfo_url , headers: {"User-Agent": "curl"}}, function(error, response, body) { if(!error && response.statusCode == 200){ IpInfo = body; } console.log(IpInfo); }) var response = { ttl: ttl, ips: ips }; // 当解析一个不存在的域名或者解析失败时,默认为0或空串, // 而通过自定义解析功能,可将0排除,获取自定义的解析记录 response.ips = response.ips.filter(ip=>ip!=0); if (hookType=="BEFORE_WRITE_CACHE") { response.ttl=100 response.ips.push('1.1.1.1') } if (hookType=="BEFORE_WRITE_RESPONSE") { response.ttl=200 response.ips.push('2.2.2.2') } return response}

四、输入参数格式

移动解析 HTTPDNS 会将运行时上下文通过一个固定的 JSON 结构传给函数中的 event 参数。具体字段如下:

字段名 含义
domainName 当前正在解析的域名。
clientIp 客户端出口 IP 地址。
hookType 当前函数的运行阶段,阶段名请参考上文 各执行阶段自定义解析函数功能说明。
ttl 解析结果过期时间,仅限 BEFORE_WRITE_CACHE、BEFORE_WRITE_RESPONS 阶段。
ips[] 解析结果 IP 列表,仅限 BEFORE_WRITE_CACHE、BEFORE_WRITE_RESPONSE 阶段。

五、输入参数示例

{ "value": "test", "text": "HTTPDNS 测试模板", "context": { "body": { "domainName": "a.tencent.com", "clientIp": "58.60.10.100", "ttl": 498, "queryType": 28, "hookType": "BEFORE_WRITE_CACHE", "ips": [ "2402:4e00:1::" ] } }}

六、输出参数格式

云函数中的函数需要将处理的结果按照如下格式返回给移动解析 HTTPDNS,以便移动解析 HTTPDNS 进行解析。

注意:说明:

注意:所有字段均为可选。当字段未返回,或返回为 null 时,移动解析 HTTPDNS 将认为自定义解析函数无需修改该字段。

字段名 含义
ips[] 解析结果 IP 列表。
ttl 解析结果过期时间(秒),30<TTL<3600。

七、输出参数示例

{ "ips": ["2402:4e00:1::", '2.2.2.2'], "ttl": 200 }

赞 (0)
上一篇 4天前
下一篇 4天前