写点什么

HarmonyOS 网络管理开发—HTTP 与 WebSocket

  • 2023-10-08
    北京
  • 本文字数:2860 字

    阅读完需:约 9 分钟

HarmonyOS网络管理开发—HTTP与WebSocket

一、  网络管理开发概述


网络管理模块主要提供以下功能:

● HTTP数据请求:通过 HTTP 发起一个数据请求。

● WebSocket连接:使用 WebSocket 建立服务器与客户端的双向连接。

● Socket连接:通过 Socket 进行数据传输。

约束与限制

使用网络管理模块的相关功能时,需要请求相应的权限。


二、  HTTP 数据请求


场景介绍

应用通过 HTTP 发起一个数据请求,支持常见的 GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT 方法。

接口说明

HTTP 数据请求功能主要由 http 模块提供。

使用该功能需要申请 ohos.permission.INTERNET 权限。

权限申请请参考访问控制(权限)开发指导

涉及的接口如下表,具体的接口说明请参考API文档


request 接口开发步骤

1.  从 @ohos.net.http.d.ts 中导入 http 命名空间。

2.  调用 createHttp()方法,创建一个 HttpRequest 对象。

3.  调用该对象的 on()方法,订阅 http 响应头事件,此接口会比 request 请求先返回。可以根据业务需要订阅此消息。

4.  调用该对象的 request()方法,传入 http 请求的 url 地址和可选参数,发起网络请求。

5.  按照实际业务需要,解析返回结果。

6.  调用该对象的 off()方法,取消订阅 http 响应头事件。

7.  当该请求使用完毕时,调用 destroy()方法主动销毁。


// 引入包名import http from '@ohos.net.http';
// 每一个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": "data to send",        },        expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型        usingCache: true, // 可选,默认为true        priority: 1, // 可选,默认为1        connectTimeout: 60000, // 可选,默认为60000ms        readTimeout: 60000, // 可选,默认为60000ms        usingProtocol: http.HttpProtocol.HTTP1_1, // 可选,协议类型默认值由系统自动指定    }, (err, data) => {        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+        } else {            console.info('error:' + JSON.stringify(err));            // 取消订阅HTTP响应头事件            httpRequest.off('headersReceive');            // 当该请求使用完毕时,调用destroy方法主动销毁            httpRequest.destroy();        }    });
复制代码


三、  WebSocket 连接

场景介绍

使用 WebSocket 建立服务器与客户端的双向连接,需要先通过 createWebSocket()方法创建 WebSocket 对象,然后通过 connect()方法连接到服务器。当连接成功后,客户端会收到 open 事件的回调,之后客户端就可以通过 send()方法与服务器进行通信。当服务器发信息给客户端时,客户端会收到 message 事件的回调。当客户端不要此连接时,可以通过调用 close()方法主动断开连接,之后客户端会收到 close 事件的回调。

若在上述任一过程中发生错误,客户端会收到 error 事件的回调。

接口说明

WebSocket 连接功能主要由 webSocket 模块提供。使用该功能需要申请 ohos.permission.INTERNET 权限。具体接口说明如下表。



开发步骤

1.  导入需要的 webSocket 模块。

2.  创建一个 WebSocket 连接,返回一个 WebSocket 对象。

3.  (可选)订阅 WebSocket 的打开、消息接收、关闭、Error 事件。

4.  根据 URL 地址,发起 WebSocket 连接。

5.  使用完 WebSocket 连接之后,主动断开连接。


import webSocket from '@ohos.net.webSocket';
var defaultIpAddress = "ws://";let ws = webSocket.createWebSocket();ws.on('open', (err, value) => {    console.log("on open, status:" + JSON.stringify(value)); // 当收到on('open')事件时,可以通过send()方法与服务器进行通信    ws.send("Hello, server!", (err, value) => { if (!err) {            console.log("Message sent successfully"); } else {            console.log("Failed to send the message. Err:" + JSON.stringify(err)); } });});ws.on('message', (err, value) => {    console.log("on message, message:" + value); // 当收到服务器的`bye`消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接 if (value === 'bye') {        ws.close((err, value) => { if (!err) {                console.log("Connection closed successfully"); } else {                console.log("Failed to close the connection. Err: " + JSON.stringify(err)); } }); }});ws.on('close', (err, value) => {    console.log("on close, code is " + value.code + ", reason is " + value.reason);});ws.on('error', (err) => {    console.log("on error, error:" + JSON.stringify(err));});ws.connect(defaultIpAddress, (err, value) => { if (!err) {        console.log("Connected successfully"); } else {        console.log("Connection failed. Err:" + JSON.stringify(err)); }});
复制代码


用户头像

每一位开发者都是华为要汇聚的星星之火 2021-10-15 加入

提供HarmonyOS关键技术解析、版本更新、开发者实践和活动资讯,欢迎各位开发者加入HarmonyOS生态,一起创造无限可能!

评论

发布
暂无评论
HarmonyOS网络管理开发—HTTP与WebSocket_HarmonyOS开发者_InfoQ写作社区