鸿蒙next开发:实现HTTP请求定制(DnsConfiguration:定制DNS)
往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)
DnsConfiguration:定制DNS
场景介绍
在远程通信服务框架中,Remote Communication Kit提供了一套高度可定制的 DNS(Domain Name System)请求规则服务,这一服务允许开发者根据自身需求调整 DNS 查询行为。此外,支持用户自定义 DNS 服务器设置。开发者可根据具体的网络环境或安全需求,选择最适合的 DNS 服务器进行配置。通过这些功能,开发者不仅能够实现网络管理的高效性,还能增强网络的安全性,确保数据传输的稳定与安全。DnsConfiguration中可设置dnsRules、dnsOverHttps。
- dnsRules(配置DNS规则)
自定义DNS服务器(DnsServers):可指定自定义的DNS服务器提供解析服务。
自定义静态DNS(StaticDnsRules):当默认的DNS不能正常解析部分域名,就需要手动添加静态DNS。添加静态DNS后,如果hostname匹配,则优先使用指定的地址。
自定义动态DNS(DynamicDnsRule):除了添加静态DNS外,还可以添加动态DNS。动态DNS可看作一个可以根据hostname和port直接返回IP地址的函数,如果设置,则优先使用函数中返回的地址。
注意
针对同一域名配置多个静态或者动态DNS规则后,Remote Communication Kit将按照配置的规则轮询服务器。
- dnsOverHttps
DNS over HTTPS配置(DnsOverHttpsConfiguration):配置HTTPS上的DNS(DOH)设置,以加密的HTTPS协议进行DNS解析请求,避免原始DNS协议中用户的DNS解析请求被窃听或者修改的问题,实现保护用户隐私的目的。如果设置,则优先使用DNS服务器解析的地址。
使用示例
下面以定制DNS服务器、重写DNS解析函数两个示例来说明如何进行DNS的定制,从而获取最佳的DNS性能体验。
定制DNS服务器
- 导入需要的模块。
import { rcp } from '@kit.RemoteCommunicationKit'; import { BusinessError } from '@kit.BasicServicesKit'; - 创建一个新的会话对象和请求,会话用于管理后续的网络请求。同时需要定义一个具体的请求,请求中指定了需要请求的URL。
const session = rcp.createSession(); // 其中的URL需要根据自身业务需要调整 const request = new rcp.Request('https://example.com'); - 设置请求的DNS规则,可根据自身业务的需要对DNS的ip和port进行设置。
request.configuration = { dns: { dnsRules: [ { ip: 'x.xxx.x.xx', // DNS服务器的IP地址 port: 53, // DNS服务器的端口号 }, ] } }; - 利用fetch发起网络请求并在成功或失败时进行响应的处理,此处只给出示例,对成功或失败的处理请根据实际业务来实现。
session.fetch(request).then((response: rcp.Response) => { console.info(`The response is ${JSON.stringify(response)}`); // 处理成功响应 }).catch((err: BusinessError) => { console.error(`The error is ${JSON.stringify(err)}`); // 处理错误 }) // 关闭会话 session.close();
定制DNS解析函数
- 导入需要的模块。
import { rcp } from '@kit.RemoteCommunicationKit'; import { BusinessError } from '@kit.BasicServicesKit'; - 创建一个新的会话对象和请求,会话用于管理后续的网络请求。同时需要定义一个具体的请求,请求中指定了需要请求的URL。
const session = rcp.createSession(); // 定义请求的URL(请根据实际需求调整) const requestURL = 'https://example.com'; const request = new rcp.Request(requestURL); - 设置DNS解析规则,此处请根据自身业务进行逻辑处理,本例只给出简单示例。
request.configuration = { dns: { dnsRules: (host: string, port: number): rcp.IpAddress[] => { if (host === 'example.com') { return ['x.xxx.x.xx', 'x.xxx.x.xx']; // 此处请根据实际情况填写 } return []; } } }; - 利用fetch发起网络请求并在成功或失败时进行响应的处理,此处只给出示例,对成功或失败的处理请根据实际业务来实现。
session.fetch(request).then((response: rcp.Response) => { // 处理成功响应 console.info(`The response is ${JSON.stringify(response)}`); }).catch((err: BusinessError) => { // 处理错误 console.error(`The error is ${JSON.stringify(err)}`); }) // 关闭会话 session.close();
更多推荐


所有评论(0)