1# 拦截Web组件发起的网络请求 2 3### 介绍 4 51. 本示例通过使用arkweb_scheme_handler.h相关API实现对Web组件发出的请求进行拦截,并为被拦截的请求提供自定义的响应头以及响应体。 62. 本工程主要实现了对以下指南文档中 https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/web/web-scheme-handler.md 示例代码片段的工程化,主要目标是实现指南中示例代码需要与sample工程文件同源。 7 8### 主页 9 101. 本示例通过使用arkweb_scheme_handler.h相关API实现对Web组件发出的请求进行拦截,并为被拦截的请求提供自定义的响应头以及响应体。 11 12#### 效果预览 13 14| 主页 | 15|:----------------------:| 16| <img src="./screenshots/home.png" width="360;" /> | 17 18#### 使用说明 19 201. 打开DEMO进入首页,展示html。 212. 点击各链接进入不同属性的拦截结果页面或读取结果页面。 22 23### 拦截视频资源 24 25#### 介绍 26 271. 此处模块主要介绍通过Web组件,拦截视频资源请求,读取本地mp4文件。 28 29#### 效果预览 30 31| 拦截视频资源 | 32| ------------------------------------------------------------ | 33| <img src="./screenshots/mp4.png" width="360;" /> | 34 35#### 使用说明 36 371. 通过点击主页的“拦截视频资源请求,读取本地mp4文件”链接,拦截页面请求并跳转到此页面并展示本地的mp4文件。 38 39### 忽略csp检查并拦截 40 41#### 介绍 42 431. 此处模块主要介绍通过Web组件,测试三方协议忽略csp检查,并成功拦截。 44 45#### 效果预览 46 47| 忽略csp检查并拦截 | 48| ------------------------------------------------------------ | 49| <img src="./screenshots/csp.png" width="360;" /> | 50 51#### 使用说明 52 531. 通过点击主页的“测试三方协议忽略csp检查,并成功拦截”链接,展示被拦截的自定义scheme请求,该scheme需要遵循标准的scheme规则,允许忽略CSP检查。 542. 如果要拦截自定义scheme的请求,需要提前将自定义scheme注册到Web内核。需要在Web组件初始化之前进行注册,Web组件初始化后再注册会失败。 55 56### 拦截ISOLATED属性 57 58#### 介绍 59 601. 此处模块主要介绍通过Web组件,测试拦截设置ISOLATED属性的三方协议。 61 62#### 效果预览 63 64| 拦截ISOLATED属性 | 65| ------------------------------------------------------------ | 66| <img src="./screenshots/ISOLATED.png" width="360;" /> | 67 68#### 使用说明 69 701. 通过点击主页的“测试拦截设置ISOLATED属性的三方协议”链接,展示被拦截的带有ISOLATED属性的自定义scheme请求,该scheme的请求必须从相同scheme加载的网页中发起。 712. 如果要拦截自定义scheme的请求,需要提前将自定义scheme注册到Web内核。需要在Web组件初始化之前进行注册,Web组件初始化后再注册会失败。 72 73### 拦截LOCAL属性 74 75#### 介绍 76 771. 此处模块主要介绍通过Web组件,测试拦截设置LOCAL属性的三方协议。 78 79#### 效果预览 80 81| 拦截LOCAL属性 | 82| ------------------------------------------------------------ | 83| <img src="./screenshots/LOCAL.png" width="360;" /> | 84 85#### 使用说明 86 871. 通过点击主页的“测试拦截设置LOCAL属性的三方协议”链接,展示被拦截的带有LOCAL属性的自定义scheme请求,该scheme需要遵循与“file” scheme一样的规则。 882. 如果要拦截自定义scheme的请求,需要提前将自定义scheme注册到Web内核。需要在Web组件初始化之前进行注册,Web组件初始化后再注册会失败。 89 90### 拦截service worker 91 92#### 介绍 93 941. 此处模块主要介绍通过Web组件,测试拦截service worker触发的请求。 95 96#### 效果预览 97 98| 拦截service worker | 99| ------------------------------------------------------------ | 100| <img src="./screenshots/service_worker.png" width="360;" /> | 101 102#### 使用说明 103 1041. 通过点击主页的“测试拦截service worker触发的请求”链接,展示被拦截的Web组件发出的scheme为“custom”的请求。 1052. 如果要拦截自定义scheme的请求,需要提前将自定义scheme注册到Web内核。需要在Web组件初始化之前进行注册,Web组件初始化后再注册会失败。 106 107### 测试读取blob类型http body stream 108 109#### 介绍 110 1111. 此处模块主要介绍通过Web组件,测试读取blob类型http body stream。 112 113#### 效果预览 114 115| 测试读取blob类型http body stream | 116| ------------------------------------------------------------ | 117| <img src="./screenshots/blob.png" width="360;" /> | 118 119#### 使用说明 120 1211. 通过点击主页的“测试读取blob类型http body stream”链接,跳转至post_data.html,通过"test xhr post"或"test xhr put"按键,创建blob类型的对应请求,并发送至服务端,在设备日志中可查看发送结果。 122 123### 测试读取chunked类型http body stream 124 125#### 介绍 126 1271. 此处模块主要介绍通过Web组件,测试读取chunked类型http body stream。 128 129#### 效果预览 130 131| 测试读取chunked类型http body stream | 132| ------------------------------------------------------------ | 133| <img src="./screenshots/chunked.png" width="360;" /> | 134 135#### 使用说明 136 1371. 通过点击主页的“测试读取chunked类型http body stream”链接,跳转至pchunked_post_stream.html,通过"test post chunked http body"按键,创建chunked类型的请求,并以POST方式发送至服务端,在设备日志中可查看发送结果。 138 139### 工程目录 140 141 142``` 143├── entry 144│ └── src 145│ └── main 146│ ├── cpp // C++代码区 147│ │ ├── CMakeLists.txt // CMAKE配置文件 148│ │ ├── hello.cpp // Native业务代码实现 149│ │ ├── rawfile_request.cpp // RawfileRequest实现 150│ │ ├── rawfile_request.h // RawfileRequest类 151│ │ └── types 152│ │ └── libentry // C++接口导出 153│ │ ├── Index.d.ts 154│ │ └── oh-package.json5 155│ ├── ets // ArkTS代码区 156│ │ ├── entryability 157│ │ │ └── EntryAbility.ets // 入口类 158│ │ ├── entrybackupability 159│ │ │ └── EntryBackupAbility.ets // 备份恢复框架 160│ │ └── pages 161│ │ └── Index.ets // 主页 162│ └── resources // 应用资源文件 163``` 164### 相关权限 165 166[ohos.permission.INTERNET](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissioninternet) 167 168### 依赖 169 170不涉及。 171 172### 约束与限制 173 1741. 本示例仅支持标准系统上运行,支持设备:RK3568。 1752. 本示例支持API14版本SDK,SDK版本号(API Version 14 Release)。 1763. 本示例需要使用DevEco Studio 版本号(5.0.1Release)才可编译运行。 177 178### 下载 179 180如需单独下载本工程,执行如下命令: 181 182``` 183git init 184git config core.sparsecheckout true 185echo code/DocsSample/ArkWeb/ArkWebSchemeHandler > .git/info/sparse-checkout 186git remote add origin https://gitee.com/openharmony/applications_app_samples.git 187git pull origin master 188```