当前位置: 首页 > news >正文

怎么登录已注册的网站网站建设文章缩略图

怎么登录已注册的网站,网站建设文章缩略图,江西网站设计团队,制作百度移动网站模板免费下载当我们在HarmonyOS NEXT中开发的应用#xff0c;基本上都会使用网络请求#xff0c;从服务端获取数据在客户端显示或者供用户交互#xff0c;有时候网络发生变化时#xff0c;我们需要做一些相应的操作#xff0c;接下来我们一起来了解下在HarmonyOS NEXT下如何监听网络状…当我们在HarmonyOS NEXT中开发的应用基本上都会使用网络请求从服务端获取数据在客户端显示或者供用户交互有时候网络发生变化时我们需要做一些相应的操作接下来我们一起来了解下在HarmonyOS NEXT下如何监听网络状态如何向服务端请求网络 网络监听 网络监听需要声明接口调用所需要的权限ohos.permission.GET_NETWORK_INFO 1.创建网络对象   从kit.NetworkKit中导入connection命名空间创建NetConnection对象 import { connection } from kit.NetworkKit;netConnection connection.createNetConnection(this.netSpecifier, this.timeout)2.开启网络状态订阅 订阅默认网络状态发生变化的通知订阅成功后进行后续步骤 openRegister(){this.netConnection.register((error:BusinessError){hilog.info(0x0000, this.TAG,JSON.stringify(error))}) } 3.订阅具体网络变化 订阅具体网络变化事件如网络可用网络丢失等 this.netConnection.on(netAvailable,(data:connection.NetHandle){promptAction.showToast({message:当前可用网络:JSON.stringify(data),duration:2000}); });this.netConnection.on(netLost,(){promptAction.showToast({message:网络丢失了,duration:2000});}); 具体的网络时间主要分为 参数说明触发时机netAvailable网络可用事件当设备连接到可用网络时触发netBlockStatusChange网络阻塞状态事件当建立网络连接超时、传输数据包丢失或网络带宽不足、负载过高时触发netCapabilitiesChange网络能力变化事件当网络的能力如类型、带宽等发生变化时触发netConnectionPropertiesChange网络连接信息变化事件当网络连接的信息如IP地址、网关等发生变化时触发netLost网络丢失事件当设备失去网络连接时触发netUnavailable网络不可用事件当设备处于无网络状态或网络不可用时触发 他们的触发条件关系如下图 4.取消网络状态订阅 应用关闭时取消网络状态订阅不在接受通知 unRegister(){this.netConnection.unregister((error:BusinessError){hilog.info(0x0000, this.TAG,移除网络状态订阅:JSON.stringify(error))}) } 使用HTTP访问网络 场景介绍 应用通过HTTP发起一个数据请求支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限 request接口开发步骤 从kit.NetworkKit中导入http命名空间。调用createHttp()方法创建一个HttpRequest对象。调用该对象的on()方法订阅http响应头事件此接口会比request请求先返回。可以根据业务需要订阅此消息。调用该对象的request()方法传入http请求的url地址和可选参数发起网络请求。按照实际业务需要解析返回结果。调用该对象的off()方法取消订阅http响应头事件。当该请求使用完毕时调用destroy()方法主动销毁。 // 引入包名 import { http } from kit.NetworkKit; import { BusinessError } from kit.BasicServicesKit;// 每一个httpRequest对应一个HTTP请求任务不可复用 let httpRequest http.createHttp(); // 用于订阅HTTP响应头此接口会比request请求先返回。可以根据业务需要订阅此消息 // 从API 8开始使用on(headersReceive, Callback)替代on(headerReceive, AsyncCallback)。 8 httpRequest.on(headersReceive, (header) {console.info(header: JSON.stringify(header)); }); httpRequest.request(// 填写HTTP请求的URL地址可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定EXAMPLE_URL,{method: http.RequestMethod.POST, // 可选默认为http.RequestMethod.GET// 开发者根据自身业务需要添加header字段header: {Content-Type: application/json},// 当使用POST请求时此字段用于传递请求体内容具体格式与服务端协商确定extraData: data to send,expectDataType: http.HttpDataType.STRING, // 可选指定返回数据的类型usingCache: true, // 可选默认为truepriority: 1, // 可选默认为1connectTimeout: 60000, // 可选默认为60000msreadTimeout: 60000, // 可选默认为60000msusingProtocol: http.HttpProtocol.HTTP1_1, // 可选协议类型默认值由系统自动指定usingProxy: false, // 可选默认不使用网络代理自API 10开始支持该属性caPath:/path/to/cacert.pem, // 可选默认使用系统预制证书自API 10开始支持该属性clientCert: { // 可选默认不使用客户端证书自API 11开始支持该属性certPath: /path/to/client.pem, // 默认不使用客户端证书自API 11开始支持该属性keyPath: /path/to/client.key, // 若证书包含Key信息传入空字符串自API 11开始支持该属性certType: http.CertType.PEM, // 可选默认使用PEM自API 11开始支持该属性keyPassword: passwordToKey // 可选输入key文件的密码自API 11开始支持该属性},multiFormDataList: [ // 可选仅当Header中content-Type为multipart/form-data时生效自API 11开始支持该属性{name: Part1, // 数据名自API 11开始支持该属性contentType: text/plain, // 数据类型自API 11开始支持该属性data: Example data, // 可选数据内容自API 11开始支持该属性remoteFileName: example.txt // 可选自API 11开始支持该属性}, {name: Part2, // 数据名自API 11开始支持该属性contentType: text/plain, // 数据类型自API 11开始支持该属性// data/app/el2/100/base/com.example.myapplication/haps/entry/files/fileName.txtfilePath: ${getContext(this).filesDir}/fileName.txt, // 可选传入文件路径自API 11开始支持该属性remoteFileName: fileName.txt // 可选自API 11开始支持该属性}]}, (err: BusinessError, data: http.HttpResponse) {if (!err) {// data.result为HTTP响应内容可根据业务需要进行解析console.info(Result: JSON.stringify(data.result));console.info(code: JSON.stringify(data.responseCode));// data.header为HTTP响应头可根据业务需要进行解析console.info(header: JSON.stringify(data.header));console.info(cookies: JSON.stringify(data.cookies)); // 8// 当该请求使用完毕时调用destroy方法主动销毁httpRequest.destroy();} else {console.error(error: JSON.stringify(err));// 取消订阅HTTP响应头事件httpRequest.off(headersReceive);// 当该请求使用完毕时调用destroy方法主动销毁httpRequest.destroy();}} ); 做过移动开发的同学应该都清楚网络请求一般官方都可能会对其再封装让开发者能够更方便快捷的使用例如Android原生开发中的OkHttp对HttpClient和Retrofit对OKHTTP RCP的网络请求开发实践 概述 Remote Communication Kit中的hms.collaboration.rcp(后续简称RCP指的是远程通信平台remote communication platformRCP提供了网络数据请求功能相较于Network Kit中HTTP请求能力RCP更具易用性且拥有更多的功能。在开发过程中如果有些场景使用Network Kit中HTTP请求能力达不到预期或无法实现那么就可以尝试使用RCP中的数据请求功能来实现。 接下来我们将先介绍RCP与HTTP的区别然后从使用RCP实现基础的网络请求、多表单提交、双向证书校验、DNS的相关设置、请求与响应拦截和捕获有关HTTP请求/响应流的详细信息等几个场景来介绍RCP拥有的能力 RCP与HTTP的区别 为了方便了解RCP与HTTP的区别可以从功能分类、功能名称和功能描述这三个方面进行对比主要区别如下 功能分类 功能名称 功能描述 HTTP RCP 基础功能 发送PATCH类型请求 以PATCH的方式请求 不支持 支持 基础功能 设置会话中URL的基地址 会话中URL的基地址将自动加在URL前面除非URL是一个绝对的URL 不支持 支持 基础功能 取消自动重定向 HTTP请求不会自动重定向 不支持 支持 基础功能 拦截请求和响应 在请求后或响应前进行拦截 不支持 支持 基础功能 取消请求 发送请求前取消、发送请求过程中取消、请求接收后取消 不支持 支持 基础功能 响应缓存 是否使用缓存请求时优先读取缓存。缓存跟随当前进程生效新缓存会替换旧缓存 不支持 支持 基础功能 设置响应数据的类型 设置数据以何种方式返回将要响应的数据类型可设置为string、object、arraybuffer等类型 支持 不支持 基础功能 定义允许的HTTP响应内容的最大字节数 服务器成功响应时在获取数据前校验响应内容的最大字节数 支持 不支持 证书验证 自定义证书校验 自定义逻辑校验客户端和服务端的证书判断是否可以连接 不支持 支持 证书验证 忽略SSL校验 在建立SSL连接时不验证服务器端的SSL证书 不支持 支持 DNS 自定义DNS解析 包括自定义DNS服务器或静态DNS规则 不支持 支持 rcp特有 捕获详细的跟踪信息 在会话中的HTTP请求期间捕获详细的跟踪信息。跟踪有助于调试、性能分析和深入了解通信过程中的数据流 不支持 支持 rcp特有 数据打点获取HTTP请求的具体数据 HTTP请求各阶段的定时信息 不支持 支持 实现网络请求 发送请求 通过RCP模块能够发起基础的网络请求如GET、POST、HEAD、PUT、DELETE、PATCH、OPTIONS等请求。以PATCH请求为例开发过程中经常会遇到发送请求修改资源的场景假设有一个UserInfo里面有userId、userName、 userGender等10个字段。可编辑功能因为需求在某个特别的页面里只能修改userName这时就可以用PATCH请求来更新局部资源。 实现思路 在创建session会话后通过创建请求对象并传入第二个参数且指定为PATCH然后通过session.fetch()发起请求即可。 导入rcp模块。创建通信会话对象调用rcp.createSession()创建通信会话对象session。使用new rcp.Request()方法创建请求对象req。调用session.fetch()方法发起请求。获取响应结果。销毁对象释放资源。 核心代码 import rcp from hms.collaboration.rcp;/*** FileName : RCPUtils* Author : kirk.wang* Time : 2025/2/14 16:52* Description : 文件描述*/ export class RCPUtils{rcpSession:rcp.Session;constructor() {//1创建Session对象this.rcpSession rcp.createSession();}//2发起请求 async getRCPRequest(exterData:string):PromiseResponseDataBean{let respData :ResponseDataBean new ResponseDataBean() ;await this.rcpSession.get(this.url).then((response){//3处理响应respData response.toJSON() as ResponseDataBean;});await this.rcpSession.post(this.url,exterData).then((response){//3处理响应respData response.toJSON() as ResponseDataBean;});return respData; }//4销毁对象 当该请求使用完毕时必须调用close方法主动释放与此会话关联的资源 destroySession(){this.rcpSession.close() }} export class ResponseDataBean{} 我们可以将RCP理解成Retrofit基于OKHttp的封装。 实现请求与响应拦截 使用拦截器可以方便的对HTTP的请求与响应进行修改您可以创建拦截器链按需定制一组拦截器对您的网络请求/响应进行修改。RCP模块提供了拦截器能力在SessionConfiguration中添加Interceptors参数传入自定义的拦截器即可在HTTP请求和响应的过程中添加拦截器功能 实现步骤 导入rcp模块。定义RequestUrlChangeInterceptor拦截器和ResponseHeaderRemoveInterceptor拦截器。在intercept()方法中实现对请求/响应的修改逻辑 核心代码 import { rcp } from kit.RemoteCommunicationKit; import { url } from kit.ArkTS; import { hilog } from kit.PerformanceAnalysisKit; import { ConnectionUtils } from ./ConnectionUtils;/*** FileName : RequestUrlChangeInterceptor* Author : kirk.wang* Time : 2025/2/16 17:34* Description : 定义RequestUrlChangeInterceptor拦截器*/ export class RequestUrlChangeInterceptor implements rcp.Interceptor {TAG RequestUrlChangeInterceptor// 自定义请求处理逻辑async intercept(context: rcp.RequestContext, next: rcp.RequestHandler): Promisercp.Response {if (context.request.method GET ConnectionUtils.isNetworkFast()) {hilog.info(0x0000, this.TAG,[RequestUrlChangeInterceptor]: Slow network is detected);const parts context.request.url.pathname.split(.);if (parts.length 2) {const changed url.URL.parseURL(context.request.url.href);changed.pathname parts[0] _small. parts[1];hilog.info(0x0000, this.TAG,[RequestUrlChangeInterceptor]: Replace URL from ${context.request.url.href} to ${changed});AppStorage.setOrCreate(ReplacedInfo,[RequestUrlChangeInterceptor]: Replace URL from ${context.request.url.href} to ${changed});context.request.url changed;}} else {hilog.info(0x0000, this.TAG,[RequestUrlChangeInterceptor]: Network is fast);}return next.handle(context);} }// 定义ResponseHeaderRemoveInterceptor拦截器 export class ResponseHeaderRemoveInterceptor implements rcp.Interceptor {TAG ResponseHeaderRemoveInterceptor// 自定义响应处理逻辑async intercept(context: rcp.RequestContext, next: rcp.RequestHandler): Promisercp.Response {const response await next.handle(context);const toReturn: rcp.Response {request: response.request,statusCode: response.statusCode,httpVersion: response.httpVersion,headers: {content-range: response.headers[content-range]},effectiveUrl: response.effectiveUrl,timeInfo: response.timeInfo,toJSON: () null};hilog.info(0x0000, this.TAG,[ResponseHeaderRemoveInterceptor]: Response was modified);return toReturn;} } 拦截器的使用 可通过RCP模块中的SessionConfiguration来进行设置在sessionConfig对象中设置interceptors即可在请求/响应中添加拦截器 const sessionConfig: rcp.SessionConfiguration {interceptors: [new RequestUrlChangeInterceptor(),new ResponseHeaderRemoveInterceptor()],requestConfiguration:{ security: this.securityConfig }} };const session rcp.createSession(sessionConfig); 和安卓的拦截器使用方法很相似我们可以在拦截器里做加解密或者自定义header的处理。
http://www.w-s-a.com/news/977093/

相关文章:

  • 微网站怎么开发wordpress 发表评论
  • 山东网站建设是什么一页网站首页图如何做
  • 游戏开发与网站开发哪个难万网影
  • 做网站编程语言建筑施工特种证书查询
  • 找人做网站内容自己编辑吗修改wordpress登陆界面
  • 登陆建设银行wap网站湖南网站建设磐石网络答疑
  • 58网站怎么做浏览度才高论坛网站怎么做排名
  • wordpress 手机网站支付京东网站建设的经费预算
  • 自己怎么样做游戏网站做海外贸易网站
  • 建立什么样的网站好制作网页网站代码
  • 岳麓区专业的建设网站公司尚一网常德论坛
  • 电商网站建设实训报告360站长平台链接提交
  • 个性化网站建设公司个人网站备案类型
  • 腾讯建站模板上海网站开发有限公司
  • 网站和小程序的区别请问做网站怎么赚钱
  • 网站logo设计免费版在线网站开发建设准备工作
  • wordpress多站点 主题南京做网站好的公司
  • 广州 门户seo到底是做什么的
  • 可以登录国外网站吗如何用家用电脑做网站
  • 吉安建站公司wordpress企业
  • 河北住房和城乡建设厅网站6thinkphp做视频网站
  • 遵义网站制作一般需要多少钱深圳全国网站制作哪个好
  • 公众平台网站价格哪个网站做餐饮推广最好
  • 深圳 公司网站设计重庆的网站设计公司价格
  • 网站开发市场分析餐饮平台app有哪些
  • 制作一个收费网站要多少钱开发网站需要什么技术
  • 网站流量统计平台二手域名做网站不收录
  • 蒙古网站后缀mysql8.0 wordpress
  • 免费建立一个网站互联网推广培训
  • WordPress多站点绑定域名深圳住房建设部官方网站