• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# HTTP数据请求
2
3## 场景介绍
4
5应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。
6
7## 接口说明
8
9HTTP数据请求功能主要由http模块提供。
10
11使用该功能需要申请ohos.permission.INTERNET权限。
12
13权限申请请参考[访问控制(权限)开发指导](../security/accesstoken-guidelines.md)。
14
15涉及的接口如下表,具体的接口说明请参考[API文档](../reference/apis/js-apis-http.md)。
16
17| 接口名                                    | 描述                                |
18| ----------------------------------------- | ----------------------------------- |
19| createHttp()                              | 创建一个http请求。                  |
20| request()                                 | 根据URL地址,发起HTTP网络请求。     |
21| requestInStream()<sup>10+</sup>                  | 根据URL地址,发起HTTP网络请求并返回流式响应|
22| destroy()                                 | 中断请求任务。                      |
23| on(type: 'headersReceive')                | 订阅HTTP Response Header 事件。     |
24| off(type: 'headersReceive')               | 取消订阅HTTP Response Header 事件。 |
25| once\('headersReceive'\)<sup>8+</sup>     | 订阅HTTP Response Header 事件,但是只触发一次。|
26| on\('dataReceive'\)<sup>10+</sup>         | 订阅HTTP流式响应数据接收事件。      |
27| off\('dataReceive'\)<sup>10+</sup>        | 取消订阅HTTP流式响应数据接收事件。  |
28| on\('dataEnd'\)<sup>10+</sup>             | 订阅HTTP流式响应数据接收完毕事件。  |
29| off\('dataEnd'\)<sup>10+</sup>            | 取消订阅HTTP流式响应数据接收完毕事件。 |
30| on\('dataReceiveProgress'\)<sup>10+</sup>        | 订阅HTTP流式响应数据接收进度事件。  |
31| off\('dataReceiveProgress'\)<sup>10+</sup>       | 取消订阅HTTP流式响应数据接收进度事件。 |
32
33## request接口开发步骤
34
351. 从@ohos.net.http.d.ts中导入http命名空间。
362. 调用createHttp()方法,创建一个HttpRequest对象。
373. 调用该对象的on()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。
384. 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。
395. 按照实际业务需要,解析返回结果。
406. 调用该对象的off()方法,取消订阅http响应头事件。
417. 当该请求使用完毕时,调用destroy()方法主动销毁。
42
43```ts
44// 引入包名
45import http from '@ohos.net.http';
46import { BusinessError } from '@ohos.base';
47
48// 每一个httpRequest对应一个HTTP请求任务,不可复用
49let httpRequest = http.createHttp();
50// 用于订阅HTTP响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息
51// 从API 8开始,使用on('headersReceive', Callback)替代on('headerReceive', AsyncCallback)。 8+
52httpRequest.on('headersReceive', (header) => {
53  console.info('header: ' + JSON.stringify(header));
54});
55httpRequest.request(
56  // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
57  "EXAMPLE_URL",
58  {
59    method: http.RequestMethod.POST, // 可选,默认为http.RequestMethod.GET
60    // 开发者根据自身业务需要添加header字段
61    header: [{
62      'Content-Type': 'application/json'
63    }],
64    // 当使用POST请求时此字段用于传递内容
65    extraData: "data to send",
66    expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型
67    usingCache: true, // 可选,默认为true
68    priority: 1, // 可选,默认为1
69    connectTimeout: 60000, // 可选,默认为60000ms
70    readTimeout: 60000, // 可选,默认为60000ms
71    usingProtocol: http.HttpProtocol.HTTP1_1, // 可选,协议类型默认值由系统自动指定
72    usingProxy: false, //可选,默认不使用网络代理,自API 10开始支持该属性
73  }, (err: BusinessError, data: http.HttpResponse) => {
74    if (!err) {
75      // data.result为HTTP响应内容,可根据业务需要进行解析
76      console.info('Result:' + JSON.stringify(data.result));
77      console.info('code:' + JSON.stringify(data.responseCode));
78      // data.header为HTTP响应头,可根据业务需要进行解析
79      console.info('header:' + JSON.stringify(data.header));
80      console.info('cookies:' + JSON.stringify(data.cookies)); // 8+
81      // 当该请求使用完毕时,调用destroy方法主动销毁
82      httpRequest.destroy();
83    } else {
84      console.error('error:' + JSON.stringify(err));
85      // 取消订阅HTTP响应头事件
86      httpRequest.off('headersReceive');
87      // 当该请求使用完毕时,调用destroy方法主动销毁
88      httpRequest.destroy();
89    }
90  }
91);
92```
93
94## requestInStream接口开发步骤
95
961. 从@ohos.net.http.d.ts中导入http命名空间。
972. 调用createHttp()方法,创建一个HttpRequest对象。
983. 调用该对象的on()方法,可以根据业务需要订阅HTTP响应头事件、HTTP流式响应数据接收事件、HTTP流式响应数据接收进度事件和HTTP流式响应数据接收完毕事件。
994. 调用该对象的requestInStream()方法,传入http请求的url地址和可选参数,发起网络请求。
1005. 按照实际业务需要,可以解析返回的响应码。
1016. 调用该对象的off()方法,取消订阅响应事件。
1027. 当该请求使用完毕时,调用destroy()方法主动销毁。
103
104```ts
105// 引入包名
106import http from '@ohos.net.http';
107import { BusinessError } from '@ohos.base';
108
109// 每一个httpRequest对应一个HTTP请求任务,不可复用
110let httpRequest = http.createHttp();
111// 用于订阅HTTP响应头事件
112httpRequest.on('headersReceive', (header: Object) => {
113  console.info('header: ' + JSON.stringify(header));
114});
115// 用于订阅HTTP流式响应数据接收事件
116let res = '';
117httpRequest.on('dataReceive', (data: ArrayBuffer) => {
118  res += data;
119  console.info('res: ' + res);
120});
121// 用于订阅HTTP流式响应数据接收完毕事件
122httpRequest.on('dataEnd', () => {
123  console.info('No more data in response, data receive end');
124});
125// 用于订阅HTTP流式响应数据接收进度事件
126class Data {
127  receiveSize: number = 0;
128  totalSize: number = 0;
129}
130httpRequest.on('dataReceiveProgress', (data: Data) => {
131  console.log("dataReceiveProgress receiveSize:" + data.receiveSize + ", totalSize:" + data.totalSize);
132});
133
134let streamInfo: http.HttpRequestOptions = {
135  method: http.RequestMethod.POST,  // 可选,默认为http.RequestMethod.GET
136  // 开发者根据自身业务需要添加header字段
137  header: ['Content-Type', 'application/json'],
138  // 当使用POST请求时此字段用于传递内容
139  extraData: ["data", "data to send"],
140  expectDataType:  http.HttpDataType.STRING,// 可选,指定返回数据的类型
141  usingCache: true, // 可选,默认为true
142  priority: 1, // 可选,默认为1
143  connectTimeout: 60000, // 可选,默认为60000ms
144  readTimeout: 60000, // 可选,默认为60000ms。若传输的数据较大,需要较长的时间,建议增大该参数以保证数据传输正常终止
145  usingProtocol: http.HttpProtocol.HTTP1_1 // 可选,协议类型默认值由系统自动指定
146}
147
148httpRequest.requestInStream(
149  // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
150  "EXAMPLE_URL",
151  streamInfo, (err: BusinessError, data: number) => {
152  console.error('error:' + JSON.stringify(err));
153  console.info('ResponseCode :' + JSON.stringify(data));
154  // 取消订阅HTTP响应头事件
155  httpRequest.off('headersReceive');
156  // 取消订阅HTTP流式响应数据接收事件
157  httpRequest.off('dataReceive');
158  // 取消订阅HTTP流式响应数据接收进度事件
159  httpRequest.off('dataReceiveProgress');
160  // 取消订阅HTTP流式响应数据接收完毕事件
161  httpRequest.off('dataEnd');
162  // 当该请求使用完毕时,调用destroy方法主动销毁
163  httpRequest.destroy();
164}
165);
166```
167
168## 相关实例
169
170针对HTTP数据请求,有以下相关实例可供参考:
171
172- [上传和下载(ArkTS)(API10)](https://gitee.com/openharmony/applications_app_samples/tree/OpenHarmony-4.0-Release/code/BasicFeature/Connectivity/UploadAndDownLoad)
173
174- [Http(ArkTS)(API10)](https://gitee.com/openharmony/applications_app_samples/tree/OpenHarmony-4.0-Release/code/BasicFeature/Connectivity/Http)
175