diff --git a/zh-cn/application-dev/connectivity/fetch-development-guideline.md b/zh-cn/application-dev/connectivity/fetch-development-guideline.md new file mode 100644 index 0000000000000000000000000000000000000000..0f48fd406f316be16af55cc1fd330563071e38ed --- /dev/null +++ b/zh-cn/application-dev/connectivity/fetch-development-guideline.md @@ -0,0 +1,67 @@ +# 发送Http请求开发指导 + +## 接口说明 + +fetch模块只有一个接口 + +``` +fetch(options: { + url: string; + data?: string | Object; + header?: Object; + method?: string; + responseType?: string; + success?: (data: FetchResponse) => void; + fail?: (data: any, code: number) => void; + complete?: () => void; +}): void; +``` + +## 开发步骤 + +index.js参考: +``` +// 引入包名 +import fetch from '@system.fetch'; + +// 编写回调函数 +function OnSuccess(resp) { + console.log("code = " + resp.code) + console.log("data = " + resp.data) +} + +function OnFail(errString, errCode) { + console.log("errString: " + errString) + console.log("errCode: " + errCode) +} + +function OnComplete() { + console.log("Fetch Complete") +} + +// 调用Api +function TestHttpApi() { + let options = { + url: "https://www.baidu.com", + method: "GET", + success: OnSuccess, + fail: OnFail, + complete: OnComplete + } + fetch.fetch(options) +} + +//导出 +export default { + testHttpApi: function () { + TestHttpApi() + } +} +``` + +index.xml参考: +``` +
+ +
+``` \ No newline at end of file diff --git a/zh-cn/application-dev/connectivity/fetch-overview.md b/zh-cn/application-dev/connectivity/fetch-overview.md new file mode 100644 index 0000000000000000000000000000000000000000..55f1ef5ca027d3e29f5bd62f69a563f9089ba90a --- /dev/null +++ b/zh-cn/application-dev/connectivity/fetch-overview.md @@ -0,0 +1,22 @@ +# 发送Http请求概述 + +## 介绍 +fetch模块是OpenHarmony为开发者提供的发送Http请求的接口。支持Http2.0协议。 + +## 约束与限制 +1. fetch模块目前仅在小型系统上支持。 +2. 开发板(以Hi3516为例)上需要在 **/etc** 下新建一个文件 **resolv.conf** 在里面写入dns服务器地址,这是使用Http的前置条件。具体的dns地址跟所连的WLAN有关,在公网上,中国可使用**114.114.114.114**,其他国家可使用**8.8.8.8**。因此如果连接的WLAN是公网,**/etc/resolv.conf** 里的内容可参考如下方式编写: + ``` + nameserver 114.114.114.114 + nameserver 8.8.8.8 + ``` + + +## 相关模块 +[ ace_engine_lite ](https://gitee.com/openharmony/ace_engine_lite) + +[ third_party_curl ](https://gitee.com/openharmony/third_party_curl) + +[ third_party_mbedtls ](https://gitee.com/openharmony/third_party_mbedtls) + +[ third_party_nghttp2 ](https://gitee.com/openharmony/third_party_nghttp2) \ No newline at end of file diff --git a/zh-cn/application-dev/connectivity/fetch.md b/zh-cn/application-dev/connectivity/fetch.md new file mode 100644 index 0000000000000000000000000000000000000000..23ccaa803536dc607f2c7a43146493725fe15d2b --- /dev/null +++ b/zh-cn/application-dev/connectivity/fetch.md @@ -0,0 +1,6 @@ +# 发送Http请求 + + +- **[发送Http请求概述](fetch-overview.md)** + +- **[发送Http请求开发指导](fetch-development-guideline.md)** \ No newline at end of file diff --git a/zh-cn/application-dev/js-reference/apis/js-apis-fetch.md b/zh-cn/application-dev/js-reference/apis/js-apis-fetch.md new file mode 100644 index 0000000000000000000000000000000000000000..721cde92d96c6d8965d4f10c0f84b03075e6aae2 --- /dev/null +++ b/zh-cn/application-dev/js-reference/apis/js-apis-fetch.md @@ -0,0 +1,136 @@ +# 发送Http请求 + +>**说明:** +1. fetch模块目前仅在小型系统上支持。 +2. 开发板(以Hi3516为例)上需要在 **/etc** 下新建一个文件 **resolv.conf** 在里面写入dns服务器地址,这是使用Http的前置条件。具体的dns地址跟所连的WLAN有关,在公网上,中国可使用**114.114.114.114**,其他国家可使用**8.8.8.8**。因此如果连接的WLAN是公网,**/etc/resolv.conf** 里的内容可参考如下方式编写: + ``` + nameserver 114.114.114.114 + nameserver 8.8.8.8 + ``` + +## 导入模块 + +``` +import fetch from '@system.fetch' +``` + +## fetch.fetch + +``` +fetch(options: { + url: string; + data?: string | Object; + header?: Object; + method?: string; + responseType?: string; + success?: (data: FetchResponse) => void; + fail?: (data: any, code: number) => void; + complete?: () => void; +}): void; +``` + +将Http请求内容以及回调函数放心 **options** 对应的字段,然后调用 **fetch.fetch(options)** 发送网络请求,请求成功或者失败后执行对应的回调函数 + +- 参数 + + |参数名|类型|必填|说明| + |----|----|----|----| + |options|Object|是|http请求参数以及请求成功或失败时执行的回调函数| + +- options各字段含义 + + |字段名|类型|必填|说明| + |----|----|----|----| + |url|string|是|网站地址,比如"https://www.example.com"| + |data|string | Object|否|1、如果请求方法是 **GET** 、 **OPTIONS** 等,data字段会被编码到URL作为URL的参数。
2、如果请求方法是 **POST** 、 **PUT** ,data字段会作为http报文中的请求体,也就是body。
详见[请求体data字段详解](#请求体data字段详解)| + |header|Object|否|Http头,以 **{"name": "value"}** 的形式提供| + |method|string|否|支持 **OPTIONS** , **GET** , **HEAD** , **POST** , **PUT** , **DELETE** 以及 **TRACE** 。默认是 **GET** | + |responseType|string|否|响应中的data字段是否需要转换成Object对象,如果responseType是"JSON"(不区分大小写),那么响应提中的data字段会转换为Object对象再调用回调函数,否则不进行转换。详见[响应详解](#响应详解)| + |success|function|否|请求成功时执行的回调函数(不是指Http的状态码,成功是指请求发出去了,并且得到了回应)。详见[响应详解](#响应详解)| + |fail|function|否|请求失败时执行的回调函数,data是错误提示,code是错误码。| + |complete|function|否|请求完成时执行的回调(无论成功还是失败)| + +### 请求体data字段详解 +- 请求方法是 **OPTIONS** , **GET** , **HEAD** , **TRACE** 或者 **GET** + - data类型是string + - data字段会直接与url进行拼接,并进行url encode,也就是将data当作url的参数 + - data类型是Object + - Object会被解析成"name1=value1&name2=value2"这样的url参数,仅对类型是string的字段进行解析 + - 举例: + - url = "https://www.example.com"
data = "name=Tony&age=20" +
那么最终的请求发出去时的url就是: "https://www.example.com?name=Tony&age=20" + - url = "https://www.example.com?type=animal"
data = "name=Tony&age=20" +
那么最终的请求发出去时的url就是: "https://www.example.com?type=animal&name=Tony&age=20" + - url = "https://www.example.com?type=animal"
data = {"name": "Tony", "age": "20"} +
那么最终的请求发出去时的url就是: "https://www.example.com?type=animal&name=Tony&age=20" + - url = "https://www.example.com?type=animal" +
data = {"name": "Tony", "age": "20", "any": {"country": "China"}} +
那么最终的请求发出去时的url就是: "https://www.example.com?type=animal&name=Tony&age=20" +
忽略"any"字段,因为其类型不是string + +- 请求方法是 **POST** 或者 **PUT** + - data类型是string + - 直接当作Http报文的body部分 + - data类型是Object + - 将data转换成string然后放在Http报文的body部分 + - 举例 + - data = {
  "name": "Tony",
  "age": "20",
  "any": {
    "country": "China"
  }
} +
那么最终的body部分是```{"name": "Tony", "age": "20", "any": {"country": "China"}}```这个字符串 + +### 响应详解 +``` +interface FetchResponse { + code: number; + data: string | object; + headers: Object; +} +``` +|字段名|类型|说明| +|----|----|----| +|code|number|当请求成功发出去并且收到响应,code是Http状态码,否则是-1| +|data|string或者Object|当请求成功发出去并且收到响应,data是Http响应体
  ```默认使用string保存,如果请求时的responseType是"json",那么会尝试将字符串转换成Object。```
当请求没有成功发送出去时,data是错误提示。| +|headers|Object|Http响应头,以 **{"name1": "value1", "name2": "value2"}** 这样的形式返回| + +## 示例 + +``` +// 引入包名 +import fetch from '@system.fetch'; + +// 编写回调函数 +function OnSuccess(resp) { + console.log("code = " + resp.code) + console.log("data = " + resp.data) +} + +function OnFail(errString, errCode) { + console.log("errString: " + errString) + console.log("errCode: " + errCode) +} + +function OnComplete() { + console.log("Fetch Complete") +} + +// 调用Api +function TestHttpApi() { + let options = { + url: "https://www.example.com", + method: "GET", + success: OnSuccess, + fail: OnFail, + complete: OnComplete + } + fetch.fetch(options) +} +``` + +## 相关仓 + +[ ace_engine_lite ](https://gitee.com/openharmony/ace_engine_lite) + +[ third_party_curl ](https://gitee.com/openharmony/third_party_curl) + +[ third_party_mbedtls ](https://gitee.com/openharmony/third_party_mbedtls) + +[ third_party_nghttp2 ](https://gitee.com/openharmony/third_party_nghttp2) \ No newline at end of file diff --git a/zh-cn/application-dev/js-reference/apis/js-apis-telephony.md b/zh-cn/application-dev/js-reference/apis/js-apis-telephony.md index ab33a0a089a1c4a0cf311ffe0ace786e107e0776..df626822a9a0556aba7613ccc0cf39ef048b6433 100644 --- a/zh-cn/application-dev/js-reference/apis/js-apis-telephony.md +++ b/zh-cn/application-dev/js-reference/apis/js-apis-telephony.md @@ -3,4 +3,5 @@ - [拨打电话](js-apis-call.md) - [短信服务](js-apis-sms.md) - [SIM卡管理](js-apis-sim.md) -- [网络搜索](js-apis-radio.md) \ No newline at end of file +- [网络搜索](js-apis-radio.md) +- [发送Http请求](js-apis-fetch.md) \ No newline at end of file diff --git "a/zh-cn/readme/\347\224\265\350\257\235\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" "b/zh-cn/readme/\347\224\265\350\257\235\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" index bf5a7381cd16ace76e26406e09734bf2d3009acc..822134caa45639b804dcc4f3a30a74ffec76d18d 100755 --- "a/zh-cn/readme/\347\224\265\350\257\235\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" +++ "b/zh-cn/readme/\347\224\265\350\257\235\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" @@ -6,12 +6,13 @@ - [使用说明](#section128mcpsimp) - [获取当前蜂窝网络信号信息](#section1458213210369) - [观察蜂窝网络状态变化](#section750135512369) + - [发送Http请求来访问网络](#section78465345345) - [相关仓](#section152mcpsimp) ## 简介 -电话服务子系统,提供了一系列的API用于获取无线蜂窝网络和SIM卡相关的一些信息。应用可以通过调用API来获取当前注册网络名称、网络服务状态、信号强度以及SIM卡的相关信息。 +电话服务子系统,提供了一系列的API用于获取无线蜂窝网络和SIM卡相关的一些信息,并且提供发送Http请求的API。应用可以通过调用API来获取当前注册网络名称、网络服务状态、信号强度以及SIM卡的相关信息,并且可以通过调用Http的API来访问网络。 各个模块主要作用如下: @@ -36,6 +37,19 @@ base/telephony/ └── state_registry # 状态注册 ``` +``` +/foundation/communication/netstack +├── frameworks # 框架代码目录 +│ ├── js # JS适配层 +│ ├── builtin # 轻量级系统和小型系统上HttpAPI基于JSI的JS适配层 +│ └── napi # 标准系统上HttpAPI基于NAPI的JS适配层 +├── interfaces # 对外暴露的API +│ └── kits # OpenHarmony SDK API +│ └── js # JS API +├── utils # 公共工具 +│ └── log # 日志工具 +``` + ## 约束 1. 目前开源的范围仅支持蜂窝通话(仅支持CS通话)和短信,不支持蜂窝数据上网,仅支持单SIM卡。 @@ -130,6 +144,47 @@ base/telephony/ ``` +### 发送Http请求来访问网络 + +**小型系统上发送Http请求** + +1. 从@system.fetch.d.ts中导入fetch类。 +2. 调用fetch(options: Object)方法发送Http请求,options参数里可写上对应的回调函数。 +3. 当网络状态发生变更时,调用者会收到回调。 + + ``` + // 引入包名 + import fetch from '@system.fetch'; + + // 编写回调函数 + function OnSuccess(resp) { + console.log("code = " + resp.code) + console.log("data = " + resp.data) + } + + function OnFail(errString, errCode) { + console.log("errString: " + errString) + console.log("errCode: " + errCode) + } + + function OnComplete() { + console.log("Fetch Complete") + } + + // 调用Api + function TestHttpApi() { + let options = { + url: "https://www.baidu.com", + method: "GET", + success: OnSuccess, + fail: OnFail, + complete: OnComplete + } + + fetch.fetch(options) + } + ``` + ## 相关仓 **电话服务子系统** @@ -143,3 +198,5 @@ base/telephony/ [telephony\_sms\_mms](https://gitee.com/openharmony/telephony_sms_mms/blob/master/README_zh.md) [telephony\_state\_registry](https://gitee.com/openharmony/telephony_state_registry/blob/master/README_zh.md) + +[communication_netstack](https://gitee.com/openharmony/communication_netstack/blob/master/README_zh.md) diff --git a/zh-cn/release-notes/OpenHarmony-v3.0-LTS.md b/zh-cn/release-notes/OpenHarmony-v3.0-LTS.md index c12c93cfc16cdbcc9df4e46b8c7f261cee6aae3f..ded67207788d2c0bc55cb3eee943c0331c9e3617 100644 --- a/zh-cn/release-notes/OpenHarmony-v3.0-LTS.md +++ b/zh-cn/release-notes/OpenHarmony-v3.0-LTS.md @@ -116,7 +116,7 @@ repo forall -c 'git lfs pull' | 编译构建 | - 支持编译arm64形态产品
- 支持编译ohos-sdk | NA | | 用户程序框架 | - 支持ServiceAbility JS开发能力
- 支持DataAbility JS开发能力
- HAP支持多Ability声明
- 本地Ability迁移到远程设备
- 应用任务栈保存与恢复
- JS 利用Zip库实现文件压缩和解压缩 | NA | | 杂散软件服务 | 支持定时器能力,提供定时时区管理能力 | NA | - +| 电话服务 | 新增Http接口用于访问网络 | 小型系统新增Http接口用于访问网络 | ### API变更