<!--
source: https://blueos.niceshare.site/native/network/fetch/
site: 蓝河文档馆
summary: 数据请求 — 蓝河文档馆 BlueOS 开发文档
-->
---
title: '数据请求'
description: '头文件<network/fetch.h>'
lastUpdated: 2023-11-07T02:55:31.000Z
---

头文件<network/fetch.h>

## 接口定义

### 创建 Http 请求 session

```ts
int BNetwork_fetchCreateSession(
    void **session
);
```

#### 参数

| 参数(输出) | 类型 | 说明 |
| --- | --- | --- |
| session | void\*\* | 创建的 Http 请求的 session 指针，用于发起 Http 请求 |

#### 返回值

| 返回值 | 类型 | 说明 |
| --- | --- | --- |
| result | int | Http 请求相关操作状态值。（详见《枚举 Http 请求状态》） |

### 销毁 Http 请求 session

```ts
int BNetwork_fetchDestroySession(
    void *session
);
```

#### 参数

| 参数(输出) | 类型 | 说明 |
| --- | --- | --- |
| session | void\* | 要销毁的 Http 请求的 session 指针 |

#### 返回值

| 返回值 | 类型 | 说明 |
| --- | --- | --- |
| result | int | Http 请求相关操作状态值。（详见《枚举 Http 请求状态》） |

### 发起 Http 请求

```ts
int BNetwork_fetch(
    void* session,
    BNetwork_FetchConfig *config,
    BNetwork_FetchCallbacks callbacks,
    void *user_data
);
```

#### 参数

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| session | void\* | BNetwork\_fetchCreateSession 创建的 session 指针 |
| config | BNetwork\_FetchConfig\* | Http 请求配置（详见《结构体 Http 请求配置》） |
| callbacks | BNetwork\_FetchCallbacks | Http 请求结果回调（详见《结构体 请求结果监听》） |
| user\_data | void\* | 自定义数据 |

#### 返回值

| 返回值 | 类型 | 说明 |
| --- | --- | --- |
| result | int | Http 请求相关操作状态值。（详见《枚举 Http 请求状态》） |

## 枚举

### Http 请求状态

| 枚举值 | 值 | 说明 |
| --- | --- | --- |
| BNETWORK\_FETCH\_OK  | 0 | Http 请求相关操作成功 |
| BNETWORK\_FETCH\_ERROR  | \-1 | Http 请求相关操作失败 |

## 结构体

### Http 请求配置 BNetwork\_FetchConfig

用于发起 http 请求。

```ts
struct BNetwork_FetchConfig {   
    const char* url;
    const char* header;
    const char* method;
    const char* data;
    size_t data_size;
}
```

#### 内容说明

| 内容 | 类型 | 说明 |
| --- | --- | --- |
| url | const char\* | 发起 HTTP 请求的 URL 地址 |
| method | const char\* | 请求方式，默认为”GET“（当设置为”“(空)时，将以默认值发起请求） 支持”OPTIONS“，”GET“，”HEAD“，”POST“，”PUT“，”DELETE“，”TRACE“，”CONNECT“ |
| header | const char\* | HTTP 请求头字段（JSON 格式字符串） 示例：{"Accept-Encoding": "gzip, deflate","Accept-Language": "zh-CN,en-US;q=0.8,en;q=0.6"} |
| data | const chat\* | HTTP 请求的额外数据 |
| data\_size | size\_t | 额外数据的数据长度 |

### Http 请求响应内容 BNetwork\_FetchResponse

http 请求成功时，该内容将作为参数传入成功回调中。

```ts
struct BNetwork_FetchResponse {
    int http_code;
    uint8_t* header;
    size_t header_size;
    uint8_t* data;
    size_t data_size;
    void* user_data;
    BNetwork_FetchConfig* config;
}
```

#### 内容说明

| 内容 | 类型 | 说明 |
| --- | --- | --- |
| http\_code | int | 请求状态 |
| header | uint8\_t\* | 响应头 |
| header\_size | size\_t | 响应头大小 |
| data | uint8\_t\* | 响应正文 |
| data\_size | size\_t | 响应正文大小 |
| user\_data | void\* | 用户自定义参数 |
| config | BNetwork\_FetchConfig\* | http 请求配置参数指针，回传用于进行资源释放等操作。 |

### 请求结果监听 BNetwork\_FetchCallbacks

包含 http 的请求结果回调的结构体，需设置“成功”、“失败”、“完成”三种回调。（详见《回调 fetch 请求结果》）

```ts
struct BNetwork_FetchCallbacks {
    onFetchSucceeded succeeded_cb;  // Http请求成功
    onFetchFailed failed_cb;        // Http请求失败
    onFetchCompleted completed_cb;  // Http请求完成
}
```

## 回调

### fetch 请求结果

#### 请求成功

```ts
void(* onFetchSucceeded)(void* session, BNetwork_FetchResponse *response);
```

##### 参数

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| session | void\* | 此 http 请求创建的 session 指针 |
| response | BNetwork\_FetchResponse \* | fetch 请求响应结果（详见《结构体 Http 请求响应内容》） |

##### 返回值

无

#### 请求失败

```ts
void(* onFetchFailed)(void* session, int errCode, BNetwork_FetchResponse *response);
```

##### 参数

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| session | void\* | 此 http 请求创建的 session 指针 |
| errCode | int | fetch 请求的错误代码 |
| response | BNetwork\_FetchResponse \* | fetch 请求响应结果（详见《结构体 Http 请求响应内容》） |

##### 返回值

无

#### 请求完成

```ts
void(* onFetchCompleted)(void* session, int opCode, BNetwork_FetchResponse *response);
```

##### 参数

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| session | void\* | 此 http 请求创建的 session 指针 |
| opCode | int | fetch 请求完成操作码 |
| response | BNetwork\_FetchResponse \* | fetch 请求响应结果（详见《结构体 Http 请求响应内容》） |

##### 返回值

无
