基于rcp的网络请求能力(常用rc网络的设计与测试实验报告结论)

基于rcp的网络请求能力rcp模块提供HTTP数据请求功能,请求性能如接口的易用性、性能、功耗方面,对比Network Kit HTTP网络API,rcp采用面向对象和场景的设计,AP

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

(0)
CSDN's avatarCSDN
上一篇 2024年6月22日 上午4:56
下一篇 2024年6月22日 上午5:48

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注