# @koo/net
## 介绍
@koo/net是一个功能丰富且易用的OpenHarmony/HarmonyOS网络访问库,通过对鸿蒙官方远场通讯服务网络框架的封装,旨在帮助开发者快速、便捷地完成各类网络请求任务。
极大简化了用户的网络访问流程。
## 安装教程
ohpm 安装
```
ohpm install @koo/net
```
## 所需权限
```
ohos.permission.INTERNET
ohos.permission.GET_NETWORK_INFO
```
## 使用说明
### 在工程级别oh-package.json5依赖@koo/net最新版本
- 引入依赖
```
'@koo/net': '1.0.3'
```
### 在EntryAbility.ets中初始化
- 导包
```typescript
import { HeaderInterceptor, LogInterceptor, NetConfig, NetUtils, NetWorkManager, ParamsInterceptor } from '@koo/net';
```
- 配置
```typescript
let config:NetConfig = new NetConfig()
let header=new Map<string,string>()
header.set("content-type","application/x-www-form-urlencoded")
header.set("user-agent","Mozilla/5.0 (Linux; Android 12; GOT-W09 Build/HUAWEIGOT-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/99.0.4844.88 Safari/537.36")
header.set('screensize','1600*2560')
header.set('curappid','381')
header.set('channel','guanfang')
header.set('version','4.3.6')
header.set('vcode','436')
header.set('macaddr','02:00:00:00:00:00')
header.set('platform','android_pad_12')
header.set('pversion','1.1')
header.set('appname','ieltspro')
header.set('vendor','ieltspro')
header.set('imei', '50e52c28135455bd')
header.set('model', 'HUAWEI,GOT-W09')
config.header=header
config.connectTimeout=15000;
config.readTimeout=15000;
config.writeTimeout=15000
config.baseUrl='https://mobi.xxx.xxx.com';
```
- 初始化请求头拦截器
```typescript
let headerIntercept:HeaderInterceptor= {
onIntercept: (header?: Map<string, string>) => {
}
}
```
- 初始化请求参数拦截器
```typescript
let paramsIntercept:ParamsInterceptor= {
onIntercept: async (params: Map<string, string>): Promise<string> => {
return ""
}
}
```
- 日志拦截器
```typescript
let logIntercept:LogInterceptor= {
onIntercept: (header: Map<string, string>): void => {
}
}
```
- 初始化网络框架
将上面初始化的数据类放入网络框架进行整体的初始化。
```typescript
NetWorkManager.getInstance().init(config,headerIntercept,paramsIntercept,logIntercept)
```
- 使用本框架发起网络请求
```typescript
async requestData(){
let params=new Map<string,string>();
params.set("sid","631e64fa6a756033186858d02a66ab5b7819a4105c17d5d2")
let a = await NetWorkManager.getInstance().post<ResponseBean>("/api/ielts/app/studyResult/getUserLastStudyInfo",params);
if(a.isSuccess()){
console.log("---->接口请求回来了,结果是code="+a.resp?.code+" message="+a.resp?.message+" popupTitle="+a.resp?.obj?.popupTitle+" lableName="+a.resp?.obj?.questionInfo?.labelName);
}else{
console.log("---->请求错误,原因是="+a.error?.data)
}
}
```
`BaseBean<ResponseBean>填写您自己的Bean类即可,请求成功后返回的就是您设置的Bean类的对象`
- Bean示例
```typescript
export class BaseResp<T>{
resp?:BaseBean<T>
netError?:NetError.NetErrorBean;
serverError?:ServerError.ServerErrorBean;
isServerError():boolean{
return this.serverError!=null;
}
isNetError():boolean{
return this.netError!=null;
}
isSuccess():boolean{
return this.resp!=null;
}
}
export class BaseBean<T>{
code:number=-1
message:string=""
obj?:T|null=null
}
export class ResponseBean{
popupTitle:string=""
popupType:string=""
questionInfo?:QuestionInfo
}
export class QuestionInfo{
labelName:String=""
}
```
- 错误码解析,此处给出了几简单个错误示例,有需要可以再次添加。
```typescript
ERROR_FAILED_RESOLVE = 9000,
ERROR_FAILED_CONNECT = 9001,
ERROR_TIMEOUT = 9002,
ERROR_UNKNOW = 10000
```
`使用时当返回的isSuccess为false时即可根据此处错误码判断具体错误类型。`