rcp模块提供HTTP数据请求功能,包括接口可用性、性能和功耗。与Network Kit 的HTTP 网络API 相比,rcp 具有面向对象和面向场景的设计。使用更加灵活,支持不同场景,具有更好的扩展性和性能。支持场景化网络API、网络代理、自定义DNS解析、自定义证书验证、服务器身份验证等功能。
场景描述
RCP网络库提供数据请求功能。相关使用场景可参考如下:
场景一:调用rcp库实现基本的网络请求功能
场景2:对http 本机库的功能进行基准测试。将表单中的多个文件上传到服务器,以便使用post 和get 请求进行处理。
场景3:根证书验证失败,请求使用自签名证书不受支持或无法通过验证,或者证书已过期,需要更改证书证书验证被RCP 网络请求功能忽略。
场景4:验证服务器和客户端之间的身份和数据完整性,以确保安全通信
场景五:不同的系统、不同的框架使用不同的域名解析机制。如果您的用户使用域名连接到您的系统,您必须配置使用集成解析域名作为处理请求的入口点。
场景6:请求时检查用户是否登录,检查用户是否有访问资源的权限,处理cookie方法,调用rcp请求实现拦截器功能Masu。
解决方案说明
场景一:
调用rcp库实现基本的网络请求功能。
渲染
计划
创建会话后,调用模块支持的各种HTTP数据提交方法,如FETCH、GET、POST、PUT等。有关相关功能,请参阅文档rcp.session。
核心代码
rcp测试(){
testUrl=\’https://www.xxx.com\’
//定义通信会话对象
const sessionWithSecurityConfig=rcp.createSession();
//获取请求
sessionWithSecurityConfig.get(testUrl).then((response)={
console.log(\’测试———-\’ + response.toString());
//页面显示请求结果
警报对话框.show(
{
title: \’请求接口回调结果\’,
message: \’网站请求:\’ + testUrl + \’\\n\\n\’ + \’回调Data: \’ + response.toString(),
})
}).catch((err:业务错误)={
警报对话框.show(
{
title: \’请求接口回调结果\’,
message: \’请求失败。错误信息:\’+err.data,
})
console.error(\’测试err:\’ + JSON.stringify(err));
});
}
场景2:
如果你使用它,你想以post格式上传多个文件到服务器并获取请求进行相应的处理。
计划
如果请求地址使用post方式上传文件,则必须发送多个文件。目前的场景可以通过MultipartForm多表单参数来实现。
核心代码
让会话=rcp.createSession();
让request=new rcp.Request(\’http://192.168.0.1:8080\’);
request.content=new rcp.MultipartForm({
文件1: {
内容或路径: {
content: new util.TextEncoder().encode(\’Text\’).buffer
}
},
文件2: {
内容或路径: {
content: new util.TextEncoder().encode(\’Text\’).buffer
}
},
});
尝试{
const resp=等待session.fetch(request);
console.log(\’resp\’,JSON.stringify(resp))
Expect(resp.statusCode).assertEqual(200);
} 捕获(e) {
Expect(JSON.stringify(e)).assertEqual(\’99\’);
}
会话.关闭();
场景3:
如果根证书验证失败,不支持使用自签名证书的请求/无法通过验证,或者证书已过期需要更改,使用rcp 能够通过忽略证书验证将是理想的选择网络请求功能。
渲染
计划
rcp 网络库允许您通过将Configuration.security 参数设置为“skip”来绕过证书验证。请参阅文档rcp.requestConfiguration。
核心代码
testUrl=\’https://www.example.com\’
//会话证书相关功能设置
const securityConfig: rcp.SecurityConfiguration={
远程验证:“跳过”
};
//开始请求
const session=rcp.createSession({ requestConfiguration: { security: securityConfig } });
session.get(testUrl).then((响应)={
console.log(\’res timeInfo :\’ + JSON.stringify(response));
}).catch((err: 业务错误)={
console.error(\’err:\’ + JSON.stringify(err));
});
场景四:
使用rcp库功能实现双向证书绑定功能,以验证身份和数据完整性并确保服务器和客户端之间通信的安全性。
渲染
计划
要实现双向证书绑定功能,必须先验证服务器证书,同时验证客户端证书。配置参数rcp.Configuration可以包含在配置界面中。
具体说明请参考文档《RCP – 双向证书验证器》。
核心代码
//读取证书内容
getContext(this).area=0
让context: Context=getContext(this);
const keyPemConent=context.resourceManager.getRawFileContentSync(\’baidu.pem\’)
//通讯URL地址
kHttpServerAddress=\’https://www.baidu.com\’;
尝试{
//建立通信请求
const 会话=rcp.createSession();
const request=new rcp.Request(kHttpServerAddress, \’GET\’);
//设置请求参数
请求.配置={
安全: {
证书: {
content: keyPemConent,
: 型“PEM”
}
}
}
console.info(\’configuration:\’ + JSON.stringify(request.configuration));
//获取获取请求结果的方法
const response=等待session.fetch(request);
console.info(\’证书验证成功\’, JSON.stringify(response));
let content1=`${kHttpServerAddress} 证书验证成功` + JSON.stringify(response);
} 捕获(错误){
console.error(\’证书验证失败\’ + JSON.stringify(err));
let content1=`${kHttpServerAddress} 证书验证失败` + JSON.stringify(err);
让e: BusinessError=错误为BusinessError;
console.error(\’testTag 获取推送令牌捕获error:\’ + JSON.stringify(e));
}
场景5:
不同的系统和框架使用不同的域名解析机制。如果您的用户通过域名连接到您的系统,您必须配置集成解析域名作为处理请求的入口。
计划
如果开发人员需要为HTTP 请求配置域名系统(DNS),例如自定义DNS 服务器或静态DNS 规则,他们可以使用会话对象上的DnsConfiguration 参数来完成此操作。
核心代码
//1.自定义DNS服务器
const customDnsServers: rcp.DnsServers=[
{ip:\’8.8.8.8\’},
{ ip: \’8.8.4.4\’, 端口: 53 },
];
const sessionWithCustomDns=rcp.createSession({ requestConfiguration: { dns: { dnsRules: CustomDnsServers } } });
//2. 自定义静态DNS功能
const staticDnsRules: rcp.StaticDnsRules=[
{ host: \’example.com\’, port: 80, ipAddresses: [\’192.168.1.1\’, \’192.168.1.2\’] },
{ 主机: \’sub.example.com\’, 端口: 443, ipAddresses: [\’192.168.2.1\’] },
];
const sessionWithStaticDns=rcp.createSession({ requestConfiguration: { dns: { dnsRules: staticDnsRules } } });
//3.为HTTP请求配置DNS
const dohConfig: rcp.DnsOverHttpsConfiguration={
url: \’https://dns.example.com/dns-query\’,
SkipCertificatesValidation: true,
};
const sessionWithDoh=rcp.createSession({ requestConfiguration: { dns: { dnsOverHttps: dohConfig } } });
场景六:
请求时判断用户是否登录,判断用户是否有权限访问资源,处理cookie方法,调用rcp请求实现拦截器功能。
计划
目前Api12支持版本中,rcp库中添加了interceptors参数,用于执行对应的拦截器函数。相关参数的说明请参见rcp.Interceptor。
核心代码
//定义拦截器
类响应缓存{
私有只读缓存: any={};
getResponse(url: string): rcp.Response {
返回this.cache[url]。
}
setResponse(url:字符串,response: rcp.Response):无效{
this.cache[url]=响应;
}
}
类ResponseCachingInterceptor 实现rcp.Interceptor {
构造函数(私有只读缓存: ResponseCache){}
异步拦截(context: rcp.RequestContext,next: rcp.RequestHandler): Promisercp.Response {
const url=context.request.url.href;
const responseFromCache=this.cache.getResponse(url);
如果(响应来自缓存){
返回Promise.resolve(responseFromCache);
}
const Promise=next.handle(context);
承诺.then((resp)={
resp.statusCode=200;
缓存.setResponse(url, resp);
});
退货承诺。
}
}
//使用rcp库的拦截器功能
const 缓存=新ResponseCache();
异步函数testInterceptor() {
const 会话=rcp.createSession({
拦截器: [新的ResponseCachingInterceptor(缓存)]
});
const response1=wait session.get(\’https://www.example.com\’);
const response2=等待session.fetch(request);
}
以上基于#rcp的网络请求功能的相关内容来源网络仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91397.html