diff --git a/LICENSE b/LICENSE
index 261eeb9e9..6f1e9a45a 100644
--- a/LICENSE
+++ b/LICENSE
@@ -42,7 +42,7 @@
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
+ separable from, or merely link (or bind by name) to the com.drake.net.interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
diff --git a/README.md b/README.md
index e7b4b949d..ea0ed2d4e 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,9 @@
不仅仅是网络请求的异步任务库
-使用文档 | 备用访问
+使用文档
+
+
![](https://i.imgur.com/X06J6fK.jpg)
@@ -18,68 +20,58 @@
-Android上不是最强网络任务库, 创新式的网络请求库(基于Kalle), 支持协程高并发网络请求
+Android上不是最强网络任务库, 基于OkHttp且完美支持其所有函数组件, 支持协程高并发网络请求
Net 1.x 版本为RxJava实现
Net 2.x 版本为协程实现(开发者无需掌握协程也可以使用)
+Net 3.x 版本为OkHttp4.x实现
+
+
+欢迎贡献代码/问题
+
-正在进行的任务
+设计哲学
-- OkHttp4.8 重构
+1. 代码优雅
+2. 文档清晰
+3. 扩展性好
+4. 功能全
-
-主要新增特性
-- 代码简洁(最少一行代码发起请求)
-- 文档详细
+主要功能
+
- Kotlin
- 协程(不懂协程也可上手)
-- 并发网络请求(马上优化网络速度!)
+- 并发网络请求
- 串行网络请求
-- 切换线程
-- DSL编程
-- 全局日志记录器(完美解决日志过长展示不清晰数据加密问题, 比抓包更强大)
-- 支持先强制读取缓存后网络请求二次刷新
-- 并发请求返回最快请求结果(可返回不同响应数据)
-- 方便的缓存处理
-- 自动错误信息吐司
-- 详细的错误信息
+- 快速切换线程
+- DSL作用域编程
+- 日志记录器(完美解决日志过长展示不清晰数据加密问题, 比抓包更强大)
+- 并发请求返回最快请求结果
- 自动异常捕获
-- 自动日志打印异常(任何网络错误可追踪到具体请求接口)
-- 自动JSON解析(可解析List)
+- 自动错误信息吐司
+- 自动JSON解析
- 自动处理下拉刷新和上拉加载
- 自动处理分页加载
- 自动缺省页
- 自动处理生命周期
- 自动处理加载对话框
+- 支持配合ViewModel
+- 异常包含请求信息
+- 数据转换器
+- 请求存储键值对
+- 请求支持Id/Group分组
+- 全局手动取消请求/自动取消请求
- 协程作用域支持错误和结束回调
+- 支持先强制读取缓存后网络请求二次刷新
- 内置超强轮循器(计时器)
- 解析JSON数组返回集合
-
-
-
-同时完全不影响Kalle的特性
-
-- 九种缓存模式
-- 重试次数拦截器
-- 数据库缓存加密
-- 上传进度监听
-- 下载进度监听
-- 断点续传
-- 下载文件策略
-- 网络连接判断
-- 自定义数据转换器
-- 网络拦截器
-- 重定向
-- 自定义请求体
-- 全局配置
-- Cookie
-- SSH证书
+- 监听上传/下载进度
@@ -102,11 +94,11 @@ allprojects {
// 协程库(版本自定)
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
+implementation "com.squareup.okhttp3:okhttp:4.9.1"
+implementation 'com.github.liangjingkanji:Net:3.0.0'
// 支持自动下拉刷新和缺省页的(可选)
implementation 'com.github.liangjingkanji:BRV:1.3.19'
-
-implementation 'com.github.liangjingkanji:Net:2.3.16'
```
@@ -132,4 +124,4 @@ distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-```
+```
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 714f8cb84..6de6b1062 100644
--- a/build.gradle
+++ b/build.gradle
@@ -18,11 +18,12 @@
buildscript {
ext {
- kotlin_version = '1.4.32'
+ kotlin_version = '1.5.0'
brv_version = '1.3.19'
coroutine_version = '1.4.3'
glide_version = '4.11.0'
- room_version = "2.2.6"
+ room_version = "2.3.0"
+ okhttp_version = "4.9.1"
}
repositories {
@@ -31,8 +32,9 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.1.3'
+ classpath 'com.android.tools.build:gradle:4.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
classpath 'org.jetbrains.dokka:dokka-gradle-plugin:0.10.1'
}
diff --git a/docs/api/net/alltypes/index.md b/docs/api/net/alltypes/index.md
index 044062d2c..6cbe32cd0 100644
--- a/docs/api/net/alltypes/index.md
+++ b/docs/api/net/alltypes/index.md
@@ -11,46 +11,51 @@
异步协程作用域
-| (extensions in package com.drake.net)
+|
-##### [android.app.Application](../com.drake.net/android.app.-application/index.md)
+##### [com.drake.net.request.BaseRequest](../com.drake.net.request/-base-request/index.md)
-| (extensions in package com.drake.net)
+|
-##### [com.yanzhenjie.kalle.KalleConfig.Builder](../com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/index.md)
+##### [com.drake.net.request.BodyRequest](../com.drake.net.request/-body-request/index.md)
-| (extensions in package com.drake.net)
+| (extensions in package com.drake.net.request)
-##### [android.content.Context](../com.drake.net/android.content.-context/index.md)
+##### [okhttp3.Request.Builder](../com.drake.net.request/okhttp3.-request.-builder/index.md)
-| (extensions in package com.drake.net)
+| (extensions in package com.drake.net.utils)
-##### [kotlinx.coroutines.CoroutineScope](../com.drake.net/kotlinx.coroutines.-coroutine-scope/index.md)
+##### [okhttp3.OkHttpClient.Builder](../com.drake.net.utils/okhttp3.-ok-http-client.-builder/index.md)
-| (extensions in package com.drake.net.error)
+|
-##### [kotlinx.coroutines.CoroutineScope](../com.drake.net.error/kotlinx.coroutines.-coroutine-scope/index.md)
+##### [com.drake.net.cache.Cache](../com.drake.net.cache/-cache/index.md)
-| (extensions in package com.drake.net.utils)
+|
-##### [kotlinx.coroutines.CoroutineScope](../com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/index.md)
+##### [com.drake.net.exception.ConvertException](../com.drake.net.exception/-convert-exception/index.md)
+转换数据异常
-| (extensions in package com.drake.net.utils)
-##### [android.database.Cursor](../com.drake.net.utils/android.database.-cursor/index.md)
+| (extensions in package com.drake.net)
+##### [kotlinx.coroutines.CoroutineScope](../com.drake.net/kotlinx.coroutines.-coroutine-scope/index.md)
-|
-##### [com.drake.net.convert.DefaultConvert](../com.drake.net.convert/-default-convert/index.md)
+| (extensions in package com.drake.net.exception)
-默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改
+##### [kotlinx.coroutines.CoroutineScope](../com.drake.net.exception/kotlinx.coroutines.-coroutine-scope/index.md)
+
+
+| (extensions in package com.drake.net.utils)
+
+##### [kotlinx.coroutines.CoroutineScope](../com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/index.md)
| (extensions in package com.drake.net.transform)
@@ -70,6 +75,23 @@
自动加载对话框网络请求
+|
+
+##### [com.drake.net.exception.DownloadFileException](../com.drake.net.exception/-download-file-exception/index.md)
+
+下载文件异常
+
+
+| (extensions in package com.drake.net.utils)
+
+##### [android.widget.EditText](../com.drake.net.utils/android.widget.-edit-text/index.md)
+
+
+| (extensions in package com.drake.net.utils)
+
+##### [java.io.File](../com.drake.net.utils/java.io.-file/index.md)
+
+
| (extensions in package com.drake.net.utils)
##### [kotlinx.coroutines.flow.Flow](../com.drake.net.utils/kotlinx.coroutines.flow.-flow/index.md)
@@ -85,6 +107,13 @@
##### [androidx.fragment.app.FragmentActivity](../com.drake.net.utils/androidx.fragment.app.-fragment-activity/index.md)
+|
+
+##### [com.drake.net.component.InitContentProvider](../com.drake.net.component/-init-content-provider/index.md)
+
+用于初始化[NetConfig.app](../com.drake.net/-net-config/app.md)
+
+
|
##### [com.drake.net.time.Interval](../com.drake.net.time/-interval/index.md)
@@ -99,14 +128,61 @@
计时器的状态
-| (extensions in package com.drake.net.utils)
+|
+
+##### [com.drake.net.convert.JSONConvert](../com.drake.net.convert/-j-s-o-n-convert/index.md)
+
+默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改
+
+
+|
+
+##### [com.drake.net.tag.Label](../com.drake.net.tag/-label/index.md)
+
+
+|
+
+##### [com.drake.net.log.LogRecorder](../com.drake.net.log/-log-recorder/index.md)
-##### [androidx.lifecycle.LifecycleOwner](../com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/index.md)
+日志记录器
|
-##### [com.drake.net.error.NetCancellationException](../com.drake.net.error/-net-cancellation-exception/index.md)
+##### [com.drake.net.interceptor.LogRecordInterceptor](../com.drake.net.interceptor/-log-record-interceptor/index.md)
+
+网络日志记录器
+可以参考此拦截器为项目中其他网络请求库配置. 本拦截器属于标准的OkHttp拦截器适用于所有OkHttp拦截器内核的网络请求库
+
+
+| (extensions in package com.drake.net.request)
+
+##### [okhttp3.MediaType](../com.drake.net.request/okhttp3.-media-type/index.md)
+
+
+|
+
+##### [com.drake.net.log.MessageType](../com.drake.net.log/-message-type/index.md)
+
+
+|
+
+##### [com.drake.net.request.Method](../com.drake.net.request/-method/index.md)
+
+
+|
+
+##### [com.drake.net.Net](../com.drake.net/-net/index.md)
+
+
+|
+
+##### [com.drake.net.interfaces.NetCallback](../com.drake.net.interfaces/-net-callback/index.md)
+
+
+|
+
+##### [com.drake.net.exception.NetCancellationException](../com.drake.net.exception/-net-cancellation-exception/index.md)
取消网络任务的异常
@@ -118,6 +194,11 @@
Net的全局配置
+|
+
+##### [com.drake.net.convert.NetConverter](../com.drake.net.convert/-net-converter/index.md)
+
+
|
##### [com.drake.net.scope.NetCoroutineScope](../com.drake.net.scope/-net-coroutine-scope/index.md)
@@ -125,6 +206,43 @@ Net的全局配置
自动显示网络错误信息协程作用域
+|
+
+##### [com.drake.net.exception.NetException](../com.drake.net.exception/-net-exception/index.md)
+
+Net网络异常
+
+
+|
+
+##### [com.drake.net.body.NetRequestBody](../com.drake.net.body/-net-request-body/index.md)
+
+
+|
+
+##### [com.drake.net.body.NetResponseBody](../com.drake.net.body/-net-response-body/index.md)
+
+
+|
+
+##### [com.drake.net.exception.NetSocketTimeoutException](../com.drake.net.exception/-net-socket-timeout-exception/index.md)
+
+
+|
+
+##### [com.drake.net.exception.NetConnectException](../com.drake.net.exception/-networking-exception/index.md)
+
+
+|
+
+##### [com.drake.net.exception.NoCacheException](../com.drake.net.exception/-no-cache-exception/index.md)
+
+
+| (extensions in package com.drake.net.utils)
+
+##### [okhttp3.OkHttpClient](../com.drake.net.utils/okhttp3.-ok-http-client/index.md)
+
+
|
##### [com.drake.net.scope.PageCoroutineScope](../com.drake.net.scope/-page-coroutine-scope/index.md)
@@ -137,42 +255,58 @@ Net的全局配置
|
-##### [com.drake.net.tag.REQUEST](../com.drake.net.tag/-r-e-q-u-e-s-t.md)
-
-请求参数打印标签
+##### [com.drake.net.request.Progress](../com.drake.net.request/-progress/index.md)
|
-##### [com.drake.net.error.RequestParamsException](../com.drake.net.error/-request-params-exception/index.md)
+##### [com.drake.net.request.ProgressListener](../com.drake.net.request/-progress-listener/index.md)
-404
+进度监听器, 为下载和上传两者
-|
+| (extensions in package com.drake.net.request)
+
+##### [okhttp3.Request](../com.drake.net.request/okhttp3.-request/index.md)
+
-##### [com.drake.net.tag.RESPONSE](../com.drake.net.tag/-r-e-s-p-o-n-s-e.md)
+| (extensions in package com.drake.net.body)
-响应体打印标签
+##### [okhttp3.RequestBody](../com.drake.net.body/okhttp3.-request-body/index.md)
|
-##### [com.drake.net.error.ResponseException](../com.drake.net.error/-response-exception/index.md)
+##### [com.drake.net.interceptor.RequestInterceptor](../com.drake.net.interceptor/-request-interceptor/index.md)
-对应网络请求后台定义的错误信息
+
+|
+
+##### [com.drake.net.exception.RequestParamsException](../com.drake.net.exception/-request-params-exception/index.md)
+
+404
+
+
+| (extensions in package com.drake.net.response)
+
+##### [okhttp3.Response](../com.drake.net.response/okhttp3.-response/index.md)
+
+
+| (extensions in package com.drake.net.body)
+
+##### [okhttp3.ResponseBody](../com.drake.net.body/okhttp3.-response-body/index.md)
|
-##### [com.drake.net.utils.SavedViewModel](../com.drake.net.utils/-saved-view-model/index.md)
+##### [com.drake.net.exception.ResponseException](../com.drake.net.exception/-response-exception/index.md)
-继承这个类可以快速创建具备saveInstance的ViewModel
+对应网络请求后台定义的错误信息
|
-##### [com.drake.net.error.ServerResponseException](../com.drake.net.error/-server-response-exception/index.md)
+##### [com.drake.net.exception.ServerResponseException](../com.drake.net.exception/-server-response-exception/index.md)
500
@@ -189,13 +323,20 @@ Net的全局配置
##### [com.drake.statelayout.StateLayout](../com.drake.net.utils/com.drake.statelayout.-state-layout/index.md)
+| (extensions in package com.drake.net.utils)
+
+##### [kotlin.String](../com.drake.net.utils/kotlin.-string/index.md)
+
+
|
-##### [com.drake.net.tag.TAG](../com.drake.net.tag/-t-a-g/index.md)
+##### [com.drake.net.exception.URLParseException](../com.drake.net.exception/-u-r-l-parse-exception/index.md)
+URL地址错误
-| (extensions in package com.drake.net.utils)
-##### [androidx.lifecycle.ViewModelStoreOwner](../com.drake.net.utils/androidx.lifecycle.-view-model-store-owner/index.md)
+|
+
+##### [com.drake.net.request.UrlRequest](../com.drake.net.request/-url-request/index.md)
diff --git a/docs/api/net/androidx.lifecycle/index.md b/docs/api/net/androidx.lifecycle/index.md
new file mode 100644
index 000000000..0e9f0d7ca
--- /dev/null
+++ b/docs/api/net/androidx.lifecycle/index.md
@@ -0,0 +1,10 @@
+[net](../index.md) / [androidx.lifecycle](./index.md)
+
+## Package androidx.lifecycle
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [scopeLife](scope-life.md) | 在[ViewModel](#)被销毁时取消协程作用域`fun ViewModel.scopeLife(dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../com.drake.net.scope/-android-scope/index.md) |
+| [scopeNetLife](scope-net-life.md) | 在[ViewModel](#)被销毁时取消协程作用域以及其中的网络请求 具备网络错误全局处理功能, 其内部的网络请求会跟随其作用域的生命周期`fun ViewModel.scopeNetLife(dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../com.drake.net.scope/-net-coroutine-scope/index.md) |
diff --git a/docs/api/net/androidx.lifecycle/scope-life.md b/docs/api/net/androidx.lifecycle/scope-life.md
new file mode 100644
index 000000000..2d012998d
--- /dev/null
+++ b/docs/api/net/androidx.lifecycle/scope-life.md
@@ -0,0 +1,8 @@
+[net](../index.md) / [androidx.lifecycle](index.md) / [scopeLife](./scope-life.md)
+
+# scopeLife
+
+`fun ViewModel.scopeLife(dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../com.drake.net.scope/-android-scope/index.md)
+
+在[ViewModel](#)被销毁时取消协程作用域
+
diff --git a/docs/api/net/androidx.lifecycle/scope-net-life.md b/docs/api/net/androidx.lifecycle/scope-net-life.md
new file mode 100644
index 000000000..4d1f4df95
--- /dev/null
+++ b/docs/api/net/androidx.lifecycle/scope-net-life.md
@@ -0,0 +1,9 @@
+[net](../index.md) / [androidx.lifecycle](index.md) / [scopeNetLife](./scope-net-life.md)
+
+# scopeNetLife
+
+`fun ViewModel.scopeNetLife(dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../com.drake.net.scope/-net-coroutine-scope/index.md)
+
+在[ViewModel](#)被销毁时取消协程作用域以及其中的网络请求
+具备网络错误全局处理功能, 其内部的网络请求会跟随其作用域的生命周期
+
diff --git a/docs/api/net/com.drake.net.body/-net-request-body/-init-.md b/docs/api/net/com.drake.net.body/-net-request-body/-init-.md
new file mode 100644
index 000000000..faae9e45c
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-request-body/-init-.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetRequestBody](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`NetRequestBody(requestBody: RequestBody, progressListeners: `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`>? = null)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/-net-request-body/content-length.md b/docs/api/net/com.drake.net.body/-net-request-body/content-length.md
new file mode 100644
index 000000000..221d8aa96
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-request-body/content-length.md
@@ -0,0 +1,6 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetRequestBody](index.md) / [contentLength](./content-length.md)
+
+# contentLength
+
+`var contentLength: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
+`fun contentLength(): `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/-net-request-body/content-type.md b/docs/api/net/com.drake.net.body/-net-request-body/content-type.md
new file mode 100644
index 000000000..45fd49389
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-request-body/content-type.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetRequestBody](index.md) / [contentType](./content-type.md)
+
+# contentType
+
+`fun contentType(): MediaType?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/-net-request-body/index.md b/docs/api/net/com.drake.net.body/-net-request-body/index.md
new file mode 100644
index 000000000..2d906f2a9
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-request-body/index.md
@@ -0,0 +1,26 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetRequestBody](./index.md)
+
+# NetRequestBody
+
+`class NetRequestBody : RequestBody`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `NetRequestBody(requestBody: RequestBody, progressListeners: `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`>? = null)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [contentLength](content-length.md) | `var contentLength: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [contentLength](content-length.md) | `fun contentLength(): `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+| [contentType](content-type.md) | `fun contentType(): MediaType?` |
+| [toString](to-string.md) | `fun toString(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [writeTo](write-to.md) | `fun writeTo(sink: BufferedSink): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net.body/-net-request-body/to-string.md b/docs/api/net/com.drake.net.body/-net-request-body/to-string.md
new file mode 100644
index 000000000..4bcc2f159
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-request-body/to-string.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetRequestBody](index.md) / [toString](./to-string.md)
+
+# toString
+
+`fun toString(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/-net-request-body/write-to.md b/docs/api/net/com.drake.net.body/-net-request-body/write-to.md
new file mode 100644
index 000000000..c2936e6fd
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-request-body/write-to.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetRequestBody](index.md) / [writeTo](./write-to.md)
+
+# writeTo
+
+`fun writeTo(sink: BufferedSink): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/-net-response-body/-init-.md b/docs/api/net/com.drake.net.body/-net-response-body/-init-.md
new file mode 100644
index 000000000..c5b7e01c0
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-response-body/-init-.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetResponseBody](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`NetResponseBody(request: Request, responseBody: ResponseBody)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/-net-response-body/content-length.md b/docs/api/net/com.drake.net.body/-net-response-body/content-length.md
new file mode 100644
index 000000000..5221cfb5a
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-response-body/content-length.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetResponseBody](index.md) / [contentLength](./content-length.md)
+
+# contentLength
+
+`fun contentLength(): `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/-net-response-body/content-type.md b/docs/api/net/com.drake.net.body/-net-response-body/content-type.md
new file mode 100644
index 000000000..d11cc2795
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-response-body/content-type.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetResponseBody](index.md) / [contentType](./content-type.md)
+
+# contentType
+
+`fun contentType(): MediaType?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/-net-response-body/index.md b/docs/api/net/com.drake.net.body/-net-response-body/index.md
new file mode 100644
index 000000000..8140cb683
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-response-body/index.md
@@ -0,0 +1,19 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetResponseBody](./index.md)
+
+# NetResponseBody
+
+`class NetResponseBody : ResponseBody`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `NetResponseBody(request: Request, responseBody: ResponseBody)` |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [contentLength](content-length.md) | `fun contentLength(): `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+| [contentType](content-type.md) | `fun contentType(): MediaType?` |
+| [source](source.md) | `fun source(): BufferedSource` |
diff --git a/docs/api/net/com.drake.net.body/-net-response-body/source.md b/docs/api/net/com.drake.net.body/-net-response-body/source.md
new file mode 100644
index 000000000..46ee31fab
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/-net-response-body/source.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [NetResponseBody](index.md) / [source](./source.md)
+
+# source
+
+`fun source(): BufferedSource`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/index.md b/docs/api/net/com.drake.net.body/index.md
new file mode 100644
index 000000000..5032c4212
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/index.md
@@ -0,0 +1,17 @@
+[net](../index.md) / [com.drake.net.body](./index.md)
+
+## Package com.drake.net.body
+
+### Types
+
+| Name | Summary |
+|---|---|
+| [NetRequestBody](-net-request-body/index.md) | `class NetRequestBody : RequestBody` |
+| [NetResponseBody](-net-response-body/index.md) | `class NetResponseBody : ResponseBody` |
+
+### Extensions for External Classes
+
+| Name | Summary |
+|---|---|
+| [okhttp3.RequestBody](okhttp3.-request-body/index.md) | |
+| [okhttp3.ResponseBody](okhttp3.-response-body/index.md) | |
diff --git a/docs/api/net/com.drake.net.body/okhttp3.-request-body/add-listener.md b/docs/api/net/com.drake.net.body/okhttp3.-request-body/add-listener.md
new file mode 100644
index 000000000..4e2bfb1d3
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/okhttp3.-request-body/add-listener.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [okhttp3.RequestBody](index.md) / [addListener](./add-listener.md)
+
+# addListener
+
+`fun RequestBody.addListener(progressListener: `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`>?): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/okhttp3.-request-body/index.md b/docs/api/net/com.drake.net.body/okhttp3.-request-body/index.md
new file mode 100644
index 000000000..f3fbc857f
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/okhttp3.-request-body/index.md
@@ -0,0 +1,7 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [okhttp3.RequestBody](./index.md)
+
+### Extensions for okhttp3.RequestBody
+
+| Name | Summary |
+|---|---|
+| [addListener](add-listener.md) | `fun RequestBody.addListener(progressListener: `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`>?): ` |
diff --git a/docs/api/net/com.drake.net.body/okhttp3.-response-body/add-listener.md b/docs/api/net/com.drake.net.body/okhttp3.-response-body/add-listener.md
new file mode 100644
index 000000000..2d8bc65b1
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/okhttp3.-response-body/add-listener.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [okhttp3.ResponseBody](index.md) / [addListener](./add-listener.md)
+
+# addListener
+
+`fun ResponseBody.addListener(request: Request): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.body/okhttp3.-response-body/index.md b/docs/api/net/com.drake.net.body/okhttp3.-response-body/index.md
new file mode 100644
index 000000000..1c9b16ce2
--- /dev/null
+++ b/docs/api/net/com.drake.net.body/okhttp3.-response-body/index.md
@@ -0,0 +1,7 @@
+[net](../../index.md) / [com.drake.net.body](../index.md) / [okhttp3.ResponseBody](./index.md)
+
+### Extensions for okhttp3.ResponseBody
+
+| Name | Summary |
+|---|---|
+| [addListener](add-listener.md) | `fun ResponseBody.addListener(request: Request): ` |
diff --git a/docs/api/net/com.drake.net.cache/-cache/-c-a-c-h-e.md b/docs/api/net/com.drake.net.cache/-cache/-c-a-c-h-e.md
new file mode 100644
index 000000000..53241c742
--- /dev/null
+++ b/docs/api/net/com.drake.net.cache/-cache/-c-a-c-h-e.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.cache](../index.md) / [Cache](index.md) / [CACHE](./-c-a-c-h-e.md)
+
+# CACHE
+
+`CACHE`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.cache/-cache/-h-e-a-d-e-r.md b/docs/api/net/com.drake.net.cache/-cache/-h-e-a-d-e-r.md
new file mode 100644
index 000000000..1e0e50916
--- /dev/null
+++ b/docs/api/net/com.drake.net.cache/-cache/-h-e-a-d-e-r.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.cache](../index.md) / [Cache](index.md) / [HEADER](./-h-e-a-d-e-r.md)
+
+# HEADER
+
+`HEADER`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.cache/-cache/-n-o-n-e.md b/docs/api/net/com.drake.net.cache/-cache/-n-o-n-e.md
new file mode 100644
index 000000000..912da5b14
--- /dev/null
+++ b/docs/api/net/com.drake.net.cache/-cache/-n-o-n-e.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.cache](../index.md) / [Cache](index.md) / [NONE](./-n-o-n-e.md)
+
+# NONE
+
+`NONE`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.cache/-cache/index.md b/docs/api/net/com.drake.net.cache/-cache/index.md
new file mode 100644
index 000000000..0c0ff2b28
--- /dev/null
+++ b/docs/api/net/com.drake.net.cache/-cache/index.md
@@ -0,0 +1,20 @@
+[net](../../index.md) / [com.drake.net.cache](../index.md) / [Cache](./index.md)
+
+# Cache
+
+`enum class Cache`
+
+### Enum Values
+
+| Name | Summary |
+|---|---|
+| [NONE](-n-o-n-e.md) | |
+| [CACHE](-c-a-c-h-e.md) | |
+| [HEADER](-h-e-a-d-e-r.md) | |
+
+### Extension Functions
+
+| Name | Summary |
+|---|---|
+| [failure](../failure.md) | `infix fun `[`Cache`](./index.md)`.failure(cache: `[`Cache`](./index.md)`): `[`Cache`](./index.md) |
+| [success](../success.md) | `infix fun `[`Cache`](./index.md)`.success(cache: `[`Cache`](./index.md)`): `[`Cache`](./index.md) |
diff --git a/docs/api/net/com.drake.net.cache/failure.md b/docs/api/net/com.drake.net.cache/failure.md
new file mode 100644
index 000000000..0f33e06d4
--- /dev/null
+++ b/docs/api/net/com.drake.net.cache/failure.md
@@ -0,0 +1,5 @@
+[net](../index.md) / [com.drake.net.cache](index.md) / [failure](./failure.md)
+
+# failure
+
+`infix fun `[`Cache`](-cache/index.md)`.failure(cache: `[`Cache`](-cache/index.md)`): `[`Cache`](-cache/index.md)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.cache/index.md b/docs/api/net/com.drake.net.cache/index.md
new file mode 100644
index 000000000..0e4d82645
--- /dev/null
+++ b/docs/api/net/com.drake.net.cache/index.md
@@ -0,0 +1,16 @@
+[net](../index.md) / [com.drake.net.cache](./index.md)
+
+## Package com.drake.net.cache
+
+### Types
+
+| Name | Summary |
+|---|---|
+| [Cache](-cache/index.md) | `enum class Cache` |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [failure](failure.md) | `infix fun `[`Cache`](-cache/index.md)`.failure(cache: `[`Cache`](-cache/index.md)`): `[`Cache`](-cache/index.md) |
+| [success](success.md) | `infix fun `[`Cache`](-cache/index.md)`.success(cache: `[`Cache`](-cache/index.md)`): `[`Cache`](-cache/index.md) |
diff --git a/docs/api/net/com.drake.net.cache/success.md b/docs/api/net/com.drake.net.cache/success.md
new file mode 100644
index 000000000..7e52a7e40
--- /dev/null
+++ b/docs/api/net/com.drake.net.cache/success.md
@@ -0,0 +1,5 @@
+[net](../index.md) / [com.drake.net.cache](index.md) / [success](./success.md)
+
+# success
+
+`infix fun `[`Cache`](-cache/index.md)`.success(cache: `[`Cache`](-cache/index.md)`): `[`Cache`](-cache/index.md)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.component/-init-content-provider/-init-.md b/docs/api/net/com.drake.net.component/-init-content-provider/-init-.md
new file mode 100644
index 000000000..67ed991cf
--- /dev/null
+++ b/docs/api/net/com.drake.net.component/-init-content-provider/-init-.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.component](../index.md) / [InitContentProvider](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`InitContentProvider()`
+
+用于初始化[NetConfig.app](../../com.drake.net/-net-config/app.md)
+
diff --git a/docs/api/net/com.drake.net.component/-init-content-provider/delete.md b/docs/api/net/com.drake.net.component/-init-content-provider/delete.md
new file mode 100644
index 000000000..4b7a7510e
--- /dev/null
+++ b/docs/api/net/com.drake.net.component/-init-content-provider/delete.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.component](../index.md) / [InitContentProvider](index.md) / [delete](./delete.md)
+
+# delete
+
+`fun delete(uri: `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`, selection: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, selectionArgs: `[`Array`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>?): `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.component/-init-content-provider/get-type.md b/docs/api/net/com.drake.net.component/-init-content-provider/get-type.md
new file mode 100644
index 000000000..846982cf7
--- /dev/null
+++ b/docs/api/net/com.drake.net.component/-init-content-provider/get-type.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.component](../index.md) / [InitContentProvider](index.md) / [getType](./get-type.md)
+
+# getType
+
+`fun getType(uri: `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.component/-init-content-provider/index.md b/docs/api/net/com.drake.net.component/-init-content-provider/index.md
new file mode 100644
index 000000000..9e8c42d79
--- /dev/null
+++ b/docs/api/net/com.drake.net.component/-init-content-provider/index.md
@@ -0,0 +1,24 @@
+[net](../../index.md) / [com.drake.net.component](../index.md) / [InitContentProvider](./index.md)
+
+# InitContentProvider
+
+`class InitContentProvider : `[`ContentProvider`](https://developer.android.com/reference/android/content/ContentProvider.html)
+
+用于初始化[NetConfig.app](../../com.drake.net/-net-config/app.md)
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | 用于初始化[NetConfig.app](../../com.drake.net/-net-config/app.md)`InitContentProvider()` |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [delete](delete.md) | `fun delete(uri: `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`, selection: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, selectionArgs: `[`Array`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>?): `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) |
+| [getType](get-type.md) | `fun getType(uri: `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [insert](insert.md) | `fun insert(uri: `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`, values: `[`ContentValues`](https://developer.android.com/reference/android/content/ContentValues.html)`?): `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`?` |
+| [onCreate](on-create.md) | `fun onCreate(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [query](query.md) | `fun query(uri: `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`, projection: `[`Array`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>?, selection: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, selectionArgs: `[`Array`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>?, sortOrder: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Cursor`](https://developer.android.com/reference/android/database/Cursor.html)`?` |
+| [update](update.md) | `fun update(uri: `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`, values: `[`ContentValues`](https://developer.android.com/reference/android/content/ContentValues.html)`?, selection: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, selectionArgs: `[`Array`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>?): `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) |
diff --git a/docs/api/net/com.drake.net.component/-init-content-provider/insert.md b/docs/api/net/com.drake.net.component/-init-content-provider/insert.md
new file mode 100644
index 000000000..caa5bd2f4
--- /dev/null
+++ b/docs/api/net/com.drake.net.component/-init-content-provider/insert.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.component](../index.md) / [InitContentProvider](index.md) / [insert](./insert.md)
+
+# insert
+
+`fun insert(uri: `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`, values: `[`ContentValues`](https://developer.android.com/reference/android/content/ContentValues.html)`?): `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.component/-init-content-provider/on-create.md b/docs/api/net/com.drake.net.component/-init-content-provider/on-create.md
new file mode 100644
index 000000000..efd9a1265
--- /dev/null
+++ b/docs/api/net/com.drake.net.component/-init-content-provider/on-create.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.component](../index.md) / [InitContentProvider](index.md) / [onCreate](./on-create.md)
+
+# onCreate
+
+`fun onCreate(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.component/-init-content-provider/query.md b/docs/api/net/com.drake.net.component/-init-content-provider/query.md
new file mode 100644
index 000000000..0d7e259bf
--- /dev/null
+++ b/docs/api/net/com.drake.net.component/-init-content-provider/query.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.component](../index.md) / [InitContentProvider](index.md) / [query](./query.md)
+
+# query
+
+`fun query(uri: `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`, projection: `[`Array`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>?, selection: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, selectionArgs: `[`Array`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>?, sortOrder: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Cursor`](https://developer.android.com/reference/android/database/Cursor.html)`?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.component/-init-content-provider/update.md b/docs/api/net/com.drake.net.component/-init-content-provider/update.md
new file mode 100644
index 000000000..32df1d41f
--- /dev/null
+++ b/docs/api/net/com.drake.net.component/-init-content-provider/update.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.component](../index.md) / [InitContentProvider](index.md) / [update](./update.md)
+
+# update
+
+`fun update(uri: `[`Uri`](https://developer.android.com/reference/android/net/Uri.html)`, values: `[`ContentValues`](https://developer.android.com/reference/android/content/ContentValues.html)`?, selection: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, selectionArgs: `[`Array`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>?): `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.component/index.md b/docs/api/net/com.drake.net.component/index.md
new file mode 100644
index 000000000..5fce47a8f
--- /dev/null
+++ b/docs/api/net/com.drake.net.component/index.md
@@ -0,0 +1,9 @@
+[net](../index.md) / [com.drake.net.component](./index.md)
+
+## Package com.drake.net.component
+
+### Types
+
+| Name | Summary |
+|---|---|
+| [InitContentProvider](-init-content-provider/index.md) | 用于初始化[NetConfig.app](../com.drake.net/-net-config/app.md)`class InitContentProvider : `[`ContentProvider`](https://developer.android.com/reference/android/content/ContentProvider.html) |
diff --git a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/-builder/build.md b/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/-builder/build.md
deleted file mode 100644
index 326456170..000000000
--- a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/-builder/build.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../../index.md) / [com.drake.net.connect](../../index.md) / [OkHttpConnectFactory](../index.md) / [Builder](index.md) / [build](./build.md)
-
-# build
-
-`open fun build(): `[`OkHttpConnectFactory`](../index.md)`!`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/-builder/client.md b/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/-builder/client.md
deleted file mode 100644
index 6fd2426d3..000000000
--- a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/-builder/client.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../../index.md) / [com.drake.net.connect](../../index.md) / [OkHttpConnectFactory](../index.md) / [Builder](index.md) / [client](./client.md)
-
-# client
-
-`open fun client(client: OkHttpClient!): Builder!`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/-builder/index.md b/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/-builder/index.md
deleted file mode 100644
index 0cbd63e2d..000000000
--- a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/-builder/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[net](../../../index.md) / [com.drake.net.connect](../../index.md) / [OkHttpConnectFactory](../index.md) / [Builder](./index.md)
-
-# Builder
-
-`open class Builder`
-
-### Functions
-
-| Name | Summary |
-|---|---|
-| [build](build.md) | `open fun build(): `[`OkHttpConnectFactory`](../index.md)`!` |
-| [client](client.md) | `open fun client(client: OkHttpClient!): Builder!` |
diff --git a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/connect.md b/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/connect.md
deleted file mode 100644
index cacd0c14e..000000000
--- a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/connect.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.connect](../index.md) / [OkHttpConnectFactory](index.md) / [connect](./connect.md)
-
-# connect
-
-`open fun connect(request: Request!): Connection!`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/index.md b/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/index.md
deleted file mode 100644
index 1f996aaac..000000000
--- a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
-[net](../../index.md) / [com.drake.net.connect](../index.md) / [OkHttpConnectFactory](./index.md)
-
-# OkHttpConnectFactory
-
-`open class OkHttpConnectFactory : ConnectFactory`
-
-Created by Zhenjie Yan on 2016/10/15.
-
-### Types
-
-| Name | Summary |
-|---|---|
-| [Builder](-builder/index.md) | `open class Builder` |
-
-### Functions
-
-| Name | Summary |
-|---|---|
-| [connect](connect.md) | `open fun connect(request: Request!): Connection!` |
-| [newBuilder](new-builder.md) | `open static fun newBuilder(): Builder!` |
diff --git a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/new-builder.md b/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/new-builder.md
deleted file mode 100644
index 0e69977f1..000000000
--- a/docs/api/net/com.drake.net.connect/-ok-http-connect-factory/new-builder.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.connect](../index.md) / [OkHttpConnectFactory](index.md) / [newBuilder](./new-builder.md)
-
-# newBuilder
-
-`open static fun newBuilder(): Builder!`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.connect/index.md b/docs/api/net/com.drake.net.connect/index.md
deleted file mode 100644
index f1f4cd9ca..000000000
--- a/docs/api/net/com.drake.net.connect/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
-[net](../index.md) / [com.drake.net.connect](./index.md)
-
-## Package com.drake.net.connect
-
-### Types
-
-| Name | Summary |
-|---|---|
-| [OkHttpConnectFactory](-ok-http-connect-factory/index.md) | Created by Zhenjie Yan on 2016/10/15.`open class OkHttpConnectFactory : ConnectFactory` |
diff --git a/docs/api/net/com.drake.net.convert/-default-convert/-init-.md b/docs/api/net/com.drake.net.convert/-default-convert/-init-.md
deleted file mode 100644
index 281026efe..000000000
--- a/docs/api/net/com.drake.net.convert/-default-convert/-init-.md
+++ /dev/null
@@ -1,15 +0,0 @@
-[net](../../index.md) / [com.drake.net.convert](../index.md) / [DefaultConvert](index.md) / [<init>](./-init-.md)
-
-# <init>
-
-`DefaultConvert(success: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "0", code: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "code", message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "msg")`
-
-默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改
-
-### Parameters
-
-`success` - 后端定义为成功状态的错误码值
-
-`code` - 错误码在JSON中的字段名
-
-`message` - 错误信息在JSON中的字段名
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.convert/-default-convert/convert.md b/docs/api/net/com.drake.net.convert/-default-convert/convert.md
deleted file mode 100644
index 64ff1615c..000000000
--- a/docs/api/net/com.drake.net.convert/-default-convert/convert.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.convert](../index.md) / [DefaultConvert](index.md) / [convert](./convert.md)
-
-# convert
-
-`open fun convert(succeed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`, failed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`, request: Request, response: Response, result: Result): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.convert/-default-convert/index.md b/docs/api/net/com.drake.net.convert/-default-convert/index.md
deleted file mode 100644
index 84234ce03..000000000
--- a/docs/api/net/com.drake.net.convert/-default-convert/index.md
+++ /dev/null
@@ -1,36 +0,0 @@
-[net](../../index.md) / [com.drake.net.convert](../index.md) / [DefaultConvert](./index.md)
-
-# DefaultConvert
-
-`abstract class DefaultConvert : Converter`
-
-默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改
-
-### Parameters
-
-`success` - 后端定义为成功状态的错误码值
-
-`code` - 错误码在JSON中的字段名
-
-`message` - 错误信息在JSON中的字段名
-
-### Constructors
-
-| Name | Summary |
-|---|---|
-| [<init>](-init-.md) | 默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改`DefaultConvert(success: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "0", code: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "code", message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "msg")` |
-
-### Properties
-
-| Name | Summary |
-|---|---|
-| [code](code.md) | 错误码在JSON中的字段名`val code: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
-| [message](message.md) | 错误信息在JSON中的字段名`val message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
-| [success](success.md) | 后端定义为成功状态的错误码值`val success: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
-
-### Functions
-
-| Name | Summary |
-|---|---|
-| [convert](convert.md) | `open fun convert(succeed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`, failed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`, request: Request, response: Response, result: Result): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
-| [parseBody](parse-body.md) | 解析字符串数据 一般用于解析JSON`abstract fun `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`.parseBody(succeed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`): S?` |
diff --git a/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/-init-.md b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/-init-.md
new file mode 100644
index 000000000..d117692f8
--- /dev/null
+++ b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/-init-.md
@@ -0,0 +1,15 @@
+[net](../../index.md) / [com.drake.net.convert](../index.md) / [JSONConvert](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`JSONConvert(success: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "0", code: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "code", message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "msg")`
+
+默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改
+
+### Parameters
+
+`success` - 后端定义为成功状态的错误码值
+
+`code` - 错误码在JSON中的字段名
+
+`message` - 错误信息在JSON中的字段名
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.convert/-default-convert/code.md b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/code.md
similarity index 81%
rename from docs/api/net/com.drake.net.convert/-default-convert/code.md
rename to docs/api/net/com.drake.net.convert/-j-s-o-n-convert/code.md
index 7993e5b3c..905e2792b 100644
--- a/docs/api/net/com.drake.net.convert/-default-convert/code.md
+++ b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/code.md
@@ -1,4 +1,4 @@
-[net](../../index.md) / [com.drake.net.convert](../index.md) / [DefaultConvert](index.md) / [code](./code.md)
+[net](../../index.md) / [com.drake.net.convert](../index.md) / [JSONConvert](index.md) / [code](./code.md)
# code
diff --git a/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/index.md b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/index.md
new file mode 100644
index 000000000..19b8b39ff
--- /dev/null
+++ b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/index.md
@@ -0,0 +1,36 @@
+[net](../../index.md) / [com.drake.net.convert](../index.md) / [JSONConvert](./index.md)
+
+# JSONConvert
+
+`abstract class JSONConvert : `[`NetConverter`](../-net-converter/index.md)
+
+默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改
+
+### Parameters
+
+`success` - 后端定义为成功状态的错误码值
+
+`code` - 错误码在JSON中的字段名
+
+`message` - 错误信息在JSON中的字段名
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | 默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改`JSONConvert(success: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "0", code: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "code", message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "msg")` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [code](code.md) | 错误码在JSON中的字段名`val code: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [message](message.md) | 错误信息在JSON中的字段名`val message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [success](success.md) | 后端定义为成功状态的错误码值`val success: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [onConvert](on-convert.md) | `open fun onConvert(succeed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`, response: Response): R?` |
+| [parseBody](parse-body.md) | 反序列化JSON`abstract fun `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`.parseBody(succeed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`): S?` |
diff --git a/docs/api/net/com.drake.net.convert/-default-convert/message.md b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/message.md
similarity index 80%
rename from docs/api/net/com.drake.net.convert/-default-convert/message.md
rename to docs/api/net/com.drake.net.convert/-j-s-o-n-convert/message.md
index 38b507985..22844dae3 100644
--- a/docs/api/net/com.drake.net.convert/-default-convert/message.md
+++ b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/message.md
@@ -1,4 +1,4 @@
-[net](../../index.md) / [com.drake.net.convert](../index.md) / [DefaultConvert](index.md) / [message](./message.md)
+[net](../../index.md) / [com.drake.net.convert](../index.md) / [JSONConvert](index.md) / [message](./message.md)
# message
diff --git a/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/on-convert.md b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/on-convert.md
new file mode 100644
index 000000000..ac44663d8
--- /dev/null
+++ b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/on-convert.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.convert](../index.md) / [JSONConvert](index.md) / [onConvert](./on-convert.md)
+
+# onConvert
+
+`open fun onConvert(succeed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`, response: Response): R?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.convert/-default-convert/parse-body.md b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/parse-body.md
similarity index 63%
rename from docs/api/net/com.drake.net.convert/-default-convert/parse-body.md
rename to docs/api/net/com.drake.net.convert/-j-s-o-n-convert/parse-body.md
index a60dff64a..ec55f49c8 100644
--- a/docs/api/net/com.drake.net.convert/-default-convert/parse-body.md
+++ b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/parse-body.md
@@ -1,15 +1,14 @@
-[net](../../index.md) / [com.drake.net.convert](../index.md) / [DefaultConvert](index.md) / [parseBody](./parse-body.md)
+[net](../../index.md) / [com.drake.net.convert](../index.md) / [JSONConvert](index.md) / [parseBody](./parse-body.md)
# parseBody
`abstract fun `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`.parseBody(succeed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`): S?`
-解析字符串数据
-一般用于解析JSON
+反序列化JSON
### Parameters
-`succeed` - 请求函数定义的泛型, 例如一般的Moshi/Gson解析数据需要使用
+`succeed` - JSON对象的类型
**Receiver**
原始字符串
diff --git a/docs/api/net/com.drake.net.convert/-default-convert/success.md b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/success.md
similarity index 80%
rename from docs/api/net/com.drake.net.convert/-default-convert/success.md
rename to docs/api/net/com.drake.net.convert/-j-s-o-n-convert/success.md
index b25de9bc0..95be122ba 100644
--- a/docs/api/net/com.drake.net.convert/-default-convert/success.md
+++ b/docs/api/net/com.drake.net.convert/-j-s-o-n-convert/success.md
@@ -1,4 +1,4 @@
-[net](../../index.md) / [com.drake.net.convert](../index.md) / [DefaultConvert](index.md) / [success](./success.md)
+[net](../../index.md) / [com.drake.net.convert](../index.md) / [JSONConvert](index.md) / [success](./success.md)
# success
diff --git a/docs/api/net/com.drake.net.convert/-net-converter/-d-e-f-a-u-l-t.md b/docs/api/net/com.drake.net.convert/-net-converter/-d-e-f-a-u-l-t.md
new file mode 100644
index 000000000..576b63eae
--- /dev/null
+++ b/docs/api/net/com.drake.net.convert/-net-converter/-d-e-f-a-u-l-t.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.convert](../index.md) / [NetConverter](index.md) / [DEFAULT](./-d-e-f-a-u-l-t.md)
+
+# DEFAULT
+
+`val DEFAULT: `[`NetConverter`](index.md)
+
+返回数据为字符串内容
+
diff --git a/docs/api/net/com.drake.net.convert/-net-converter/index.md b/docs/api/net/com.drake.net.convert/-net-converter/index.md
new file mode 100644
index 000000000..292d6b2bc
--- /dev/null
+++ b/docs/api/net/com.drake.net.convert/-net-converter/index.md
@@ -0,0 +1,23 @@
+[net](../../index.md) / [com.drake.net.convert](../index.md) / [NetConverter](./index.md)
+
+# NetConverter
+
+`interface NetConverter`
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [onConvert](on-convert.md) | `abstract fun onConvert(succeed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`, response: Response): R?` |
+
+### Companion Object Properties
+
+| Name | Summary |
+|---|---|
+| [DEFAULT](-d-e-f-a-u-l-t.md) | 返回数据为字符串内容`val DEFAULT: `[`NetConverter`](./index.md) |
+
+### Inheritors
+
+| Name | Summary |
+|---|---|
+| [JSONConvert](../-j-s-o-n-convert/index.md) | 默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改`abstract class JSONConvert : `[`NetConverter`](./index.md) |
diff --git a/docs/api/net/com.drake.net.convert/-net-converter/on-convert.md b/docs/api/net/com.drake.net.convert/-net-converter/on-convert.md
new file mode 100644
index 000000000..faa8e4a6f
--- /dev/null
+++ b/docs/api/net/com.drake.net.convert/-net-converter/on-convert.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.convert](../index.md) / [NetConverter](index.md) / [onConvert](./on-convert.md)
+
+# onConvert
+
+`abstract fun onConvert(succeed: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`, response: Response): R?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.convert/index.md b/docs/api/net/com.drake.net.convert/index.md
index 11a9879a3..a8c965f1d 100644
--- a/docs/api/net/com.drake.net.convert/index.md
+++ b/docs/api/net/com.drake.net.convert/index.md
@@ -6,4 +6,5 @@
| Name | Summary |
|---|---|
-| [DefaultConvert](-default-convert/index.md) | 默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改`abstract class DefaultConvert : Converter` |
+| [JSONConvert](-j-s-o-n-convert/index.md) | 默认的转换器实现, 如果不满足需求建议将该文件复制到项目中修改`abstract class JSONConvert : `[`NetConverter`](-net-converter/index.md) |
+| [NetConverter](-net-converter/index.md) | `interface NetConverter` |
diff --git a/docs/api/net/com.drake.net.error/-request-params-exception/-init-.md b/docs/api/net/com.drake.net.error/-request-params-exception/-init-.md
deleted file mode 100644
index 895f40f05..000000000
--- a/docs/api/net/com.drake.net.error/-request-params-exception/-init-.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [RequestParamsException](index.md) / [<init>](./-init-.md)
-
-# <init>
-
-`RequestParamsException(code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, request: Request)`
-
-404
-
diff --git a/docs/api/net/com.drake.net.error/-request-params-exception/code.md b/docs/api/net/com.drake.net.error/-request-params-exception/code.md
deleted file mode 100644
index cdda117aa..000000000
--- a/docs/api/net/com.drake.net.error/-request-params-exception/code.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [RequestParamsException](index.md) / [code](./code.md)
-
-# code
-
-`val code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.error/-request-params-exception/index.md b/docs/api/net/com.drake.net.error/-request-params-exception/index.md
deleted file mode 100644
index 8d094c1ac..000000000
--- a/docs/api/net/com.drake.net.error/-request-params-exception/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [RequestParamsException](./index.md)
-
-# RequestParamsException
-
-`class RequestParamsException : NetException`
-
-404
-
-### Constructors
-
-| Name | Summary |
-|---|---|
-| [<init>](-init-.md) | 404`RequestParamsException(code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, request: Request)` |
-
-### Properties
-
-| Name | Summary |
-|---|---|
-| [code](code.md) | `val code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) |
diff --git a/docs/api/net/com.drake.net.error/-response-exception/-init-.md b/docs/api/net/com.drake.net.error/-response-exception/-init-.md
deleted file mode 100644
index fa1155b70..000000000
--- a/docs/api/net/com.drake.net.error/-response-exception/-init-.md
+++ /dev/null
@@ -1,15 +0,0 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [ResponseException](index.md) / [<init>](./-init-.md)
-
-# <init>
-
-`ResponseException(code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, msg: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, request: Request)`
-
-对应网络请求后台定义的错误信息
-
-### Parameters
-
-`msg` - 网络请求错误信息
-
-`code` - 网络请求错误码
-
-`tag` - 应对错误码判断为错时但是后端又返回了需要使用的数据(建议后端修改). 一般在Convert中设置数据
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.error/-response-exception/code.md b/docs/api/net/com.drake.net.error/-response-exception/code.md
deleted file mode 100644
index 0509c1342..000000000
--- a/docs/api/net/com.drake.net.error/-response-exception/code.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [ResponseException](index.md) / [code](./code.md)
-
-# code
-
-`val code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)
-
-网络请求错误码
-
diff --git a/docs/api/net/com.drake.net.error/-response-exception/index.md b/docs/api/net/com.drake.net.error/-response-exception/index.md
deleted file mode 100644
index 151f2a26d..000000000
--- a/docs/api/net/com.drake.net.error/-response-exception/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [ResponseException](./index.md)
-
-# ResponseException
-
-`class ResponseException : NetException`
-
-对应网络请求后台定义的错误信息
-
-### Parameters
-
-`msg` - 网络请求错误信息
-
-`code` - 网络请求错误码
-
-`tag` - 应对错误码判断为错时但是后端又返回了需要使用的数据(建议后端修改). 一般在Convert中设置数据
-
-### Constructors
-
-| Name | Summary |
-|---|---|
-| [<init>](-init-.md) | 对应网络请求后台定义的错误信息`ResponseException(code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, msg: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, request: Request)` |
-
-### Properties
-
-| Name | Summary |
-|---|---|
-| [code](code.md) | 网络请求错误码`val code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) |
-| [msg](msg.md) | 网络请求错误信息`val msg: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
diff --git a/docs/api/net/com.drake.net.error/-response-exception/msg.md b/docs/api/net/com.drake.net.error/-response-exception/msg.md
deleted file mode 100644
index f0a1f6464..000000000
--- a/docs/api/net/com.drake.net.error/-response-exception/msg.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [ResponseException](index.md) / [msg](./msg.md)
-
-# msg
-
-`val msg: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
-
-网络请求错误信息
-
diff --git a/docs/api/net/com.drake.net.error/-server-response-exception/-init-.md b/docs/api/net/com.drake.net.error/-server-response-exception/-init-.md
deleted file mode 100644
index 87c554842..000000000
--- a/docs/api/net/com.drake.net.error/-server-response-exception/-init-.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [ServerResponseException](index.md) / [<init>](./-init-.md)
-
-# <init>
-
-`ServerResponseException(code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, request: Request)`
-
-500
-
diff --git a/docs/api/net/com.drake.net.error/-server-response-exception/code.md b/docs/api/net/com.drake.net.error/-server-response-exception/code.md
deleted file mode 100644
index 198423caf..000000000
--- a/docs/api/net/com.drake.net.error/-server-response-exception/code.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [ServerResponseException](index.md) / [code](./code.md)
-
-# code
-
-`val code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.error/-server-response-exception/index.md b/docs/api/net/com.drake.net.error/-server-response-exception/index.md
deleted file mode 100644
index f81919917..000000000
--- a/docs/api/net/com.drake.net.error/-server-response-exception/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [ServerResponseException](./index.md)
-
-# ServerResponseException
-
-`class ServerResponseException : NetException`
-
-500
-
-### Constructors
-
-| Name | Summary |
-|---|---|
-| [<init>](-init-.md) | 500`ServerResponseException(code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, request: Request)` |
-
-### Properties
-
-| Name | Summary |
-|---|---|
-| [code](code.md) | `val code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) |
diff --git a/docs/api/net/com.drake.net.error/index.md b/docs/api/net/com.drake.net.error/index.md
deleted file mode 100644
index 7bdc85a86..000000000
--- a/docs/api/net/com.drake.net.error/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
-[net](../index.md) / [com.drake.net.error](./index.md)
-
-## Package com.drake.net.error
-
-### Exceptions
-
-| Name | Summary |
-|---|---|
-| [NetCancellationException](-net-cancellation-exception/index.md) | 取消网络任务的异常`class NetCancellationException : `[`CancellationException`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/CancellationException.html) |
-| [RequestParamsException](-request-params-exception/index.md) | 404`class RequestParamsException : NetException` |
-| [ResponseException](-response-exception/index.md) | 对应网络请求后台定义的错误信息`class ResponseException : NetException` |
-| [ServerResponseException](-server-response-exception/index.md) | 500`class ServerResponseException : NetException` |
-
-### Extensions for External Classes
-
-| Name | Summary |
-|---|---|
-| [kotlinx.coroutines.CoroutineScope](kotlinx.coroutines.-coroutine-scope/index.md) | |
diff --git a/docs/api/net/com.drake.net.exception/-convert-exception/-init-.md b/docs/api/net/com.drake.net.exception/-convert-exception/-init-.md
new file mode 100644
index 000000000..4a0e8487f
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-convert-exception/-init-.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [ConvertException](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`ConvertException(response: Response, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "An exception occurred while converting the data", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)`
+
+转换数据异常
+
diff --git a/docs/api/net/com.drake.net.exception/-convert-exception/index.md b/docs/api/net/com.drake.net.exception/-convert-exception/index.md
new file mode 100644
index 000000000..322ff55af
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-convert-exception/index.md
@@ -0,0 +1,19 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [ConvertException](./index.md)
+
+# ConvertException
+
+`class ConvertException : `[`NetException`](../-net-exception/index.md)
+
+转换数据异常
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | 转换数据异常`ConvertException(response: Response, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "An exception occurred while converting the data", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [response](response.md) | `val response: Response` |
diff --git a/docs/api/net/com.drake.net.exception/-convert-exception/response.md b/docs/api/net/com.drake.net.exception/-convert-exception/response.md
new file mode 100644
index 000000000..8c86798a6
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-convert-exception/response.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [ConvertException](index.md) / [response](./response.md)
+
+# response
+
+`val response: Response`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.exception/-download-file-exception/-init-.md b/docs/api/net/com.drake.net.exception/-download-file-exception/-init-.md
new file mode 100644
index 000000000..43749dcbf
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-download-file-exception/-init-.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [DownloadFileException](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`DownloadFileException(response: Response, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`? = "", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)`
+
+下载文件异常
+
diff --git a/docs/api/net/com.drake.net.exception/-download-file-exception/index.md b/docs/api/net/com.drake.net.exception/-download-file-exception/index.md
new file mode 100644
index 000000000..b4b39391d
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-download-file-exception/index.md
@@ -0,0 +1,13 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [DownloadFileException](./index.md)
+
+# DownloadFileException
+
+`class DownloadFileException : `[`NetException`](../-net-exception/index.md)
+
+下载文件异常
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | 下载文件异常`DownloadFileException(response: Response, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`? = "", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)` |
diff --git a/docs/api/net/com.drake.net.error/-net-cancellation-exception/-init-.md b/docs/api/net/com.drake.net.exception/-net-cancellation-exception/-init-.md
similarity index 61%
rename from docs/api/net/com.drake.net.error/-net-cancellation-exception/-init-.md
rename to docs/api/net/com.drake.net.exception/-net-cancellation-exception/-init-.md
index e2c9416c5..799ed4e0b 100644
--- a/docs/api/net/com.drake.net.error/-net-cancellation-exception/-init-.md
+++ b/docs/api/net/com.drake.net.exception/-net-cancellation-exception/-init-.md
@@ -1,4 +1,4 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [NetCancellationException](index.md) / [<init>](./-init-.md)
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NetCancellationException](index.md) / [<init>](./-init-.md)
# <init>
diff --git a/docs/api/net/com.drake.net.error/-net-cancellation-exception/index.md b/docs/api/net/com.drake.net.exception/-net-cancellation-exception/index.md
similarity index 82%
rename from docs/api/net/com.drake.net.error/-net-cancellation-exception/index.md
rename to docs/api/net/com.drake.net.exception/-net-cancellation-exception/index.md
index 261dac1c7..7a4c93b5e 100644
--- a/docs/api/net/com.drake.net.error/-net-cancellation-exception/index.md
+++ b/docs/api/net/com.drake.net.exception/-net-cancellation-exception/index.md
@@ -1,4 +1,4 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [NetCancellationException](./index.md)
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NetCancellationException](./index.md)
# NetCancellationException
diff --git a/docs/api/net/com.drake.net.exception/-net-exception/-init-.md b/docs/api/net/com.drake.net.exception/-net-exception/-init-.md
new file mode 100644
index 000000000..6f35bf548
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-net-exception/-init-.md
@@ -0,0 +1,13 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NetException](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`NetException(request: Request, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`? = "", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)`
+
+Net网络异常
+
+### Parameters
+
+`request` - 请求信息
+
+`message` - 异常信息
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.exception/-net-exception/get-localized-message.md b/docs/api/net/com.drake.net.exception/-net-exception/get-localized-message.md
new file mode 100644
index 000000000..35fac2ca6
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-net-exception/get-localized-message.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NetException](index.md) / [getLocalizedMessage](./get-localized-message.md)
+
+# getLocalizedMessage
+
+`open fun getLocalizedMessage(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.exception/-net-exception/index.md b/docs/api/net/com.drake.net.exception/-net-exception/index.md
new file mode 100644
index 000000000..ceb71f3a0
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-net-exception/index.md
@@ -0,0 +1,44 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NetException](./index.md)
+
+# NetException
+
+`open class NetException : `[`IOException`](https://docs.oracle.com/javase/6/docs/api/java/io/IOException.html)
+
+Net网络异常
+
+### Parameters
+
+`request` - 请求信息
+
+`message` - 异常信息
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | Net网络异常`NetException(request: Request, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`? = "", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [request](request.md) | 请求信息`val request: Request` |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [getLocalizedMessage](get-localized-message.md) | `open fun getLocalizedMessage(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+
+### Inheritors
+
+| Name | Summary |
+|---|---|
+| [ConvertException](../-convert-exception/index.md) | 转换数据异常`class ConvertException : `[`NetException`](./index.md) |
+| [DownloadFileException](../-download-file-exception/index.md) | 下载文件异常`class DownloadFileException : `[`NetException`](./index.md) |
+| [NetSocketTimeoutException](../-net-socket-timeout-exception/index.md) | `class NetSocketTimeoutException : `[`NetException`](./index.md) |
+| [NetworkingException](../-networking-exception/index.md) | `class NetworkingException : `[`NetException`](./index.md) |
+| [NoCacheException](../-no-cache-exception/index.md) | `class NoCacheException : `[`NetException`](./index.md) |
+| [RequestParamsException](../-request-params-exception/index.md) | 404`class RequestParamsException : `[`NetException`](./index.md) |
+| [ResponseException](../-response-exception/index.md) | 对应网络请求后台定义的错误信息`class ResponseException : `[`NetException`](./index.md) |
+| [ServerResponseException](../-server-response-exception/index.md) | 500`class ServerResponseException : `[`NetException`](./index.md) |
diff --git a/docs/api/net/com.drake.net.exception/-net-exception/request.md b/docs/api/net/com.drake.net.exception/-net-exception/request.md
new file mode 100644
index 000000000..7d747e2cb
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-net-exception/request.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NetException](index.md) / [request](./request.md)
+
+# request
+
+`val request: Request`
+
+请求信息
+
diff --git a/docs/api/net/com.drake.net.exception/-net-socket-timeout-exception/-init-.md b/docs/api/net/com.drake.net.exception/-net-socket-timeout-exception/-init-.md
new file mode 100644
index 000000000..ca1b90f72
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-net-socket-timeout-exception/-init-.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NetSocketTimeoutException](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`NetSocketTimeoutException(request: Request, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`? = "", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.exception/-net-socket-timeout-exception/index.md b/docs/api/net/com.drake.net.exception/-net-socket-timeout-exception/index.md
new file mode 100644
index 000000000..db3cac241
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-net-socket-timeout-exception/index.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NetSocketTimeoutException](./index.md)
+
+# NetSocketTimeoutException
+
+`class NetSocketTimeoutException : `[`NetException`](../-net-exception/index.md)
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `NetSocketTimeoutException(request: Request, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`? = "", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)` |
diff --git a/docs/api/net/com.drake.net.exception/-networking-exception/-init-.md b/docs/api/net/com.drake.net.exception/-networking-exception/-init-.md
new file mode 100644
index 000000000..9bb900c8e
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-networking-exception/-init-.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NetworkingException](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`NetworkingException(request: Request, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`? = "", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.exception/-networking-exception/index.md b/docs/api/net/com.drake.net.exception/-networking-exception/index.md
new file mode 100644
index 000000000..3b36704fa
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-networking-exception/index.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NetworkingException](./index.md)
+
+# NetworkingException
+
+`class NetworkingException : `[`NetException`](../-net-exception/index.md)
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `NetworkingException(request: Request, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`? = "", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)` |
diff --git a/docs/api/net/com.drake.net.exception/-no-cache-exception/-init-.md b/docs/api/net/com.drake.net.exception/-no-cache-exception/-init-.md
new file mode 100644
index 000000000..1083178d5
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-no-cache-exception/-init-.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NoCacheException](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`NoCacheException(request: Request, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`? = "", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.exception/-no-cache-exception/index.md b/docs/api/net/com.drake.net.exception/-no-cache-exception/index.md
new file mode 100644
index 000000000..5d14716f4
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-no-cache-exception/index.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [NoCacheException](./index.md)
+
+# NoCacheException
+
+`class NoCacheException : `[`NetException`](../-net-exception/index.md)
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `NoCacheException(request: Request, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`? = "", cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)` |
diff --git a/docs/api/net/com.drake.net.exception/-request-params-exception/-init-.md b/docs/api/net/com.drake.net.exception/-request-params-exception/-init-.md
new file mode 100644
index 000000000..5b45fb432
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-request-params-exception/-init-.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [RequestParamsException](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`RequestParamsException(response: Response)`
+
+404
+
diff --git a/docs/api/net/com.drake.net.exception/-request-params-exception/index.md b/docs/api/net/com.drake.net.exception/-request-params-exception/index.md
new file mode 100644
index 000000000..c98ded980
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-request-params-exception/index.md
@@ -0,0 +1,19 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [RequestParamsException](./index.md)
+
+# RequestParamsException
+
+`class RequestParamsException : `[`NetException`](../-net-exception/index.md)
+
+404
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | 404`RequestParamsException(response: Response)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [response](response.md) | `val response: Response` |
diff --git a/docs/api/net/com.drake.net.exception/-request-params-exception/response.md b/docs/api/net/com.drake.net.exception/-request-params-exception/response.md
new file mode 100644
index 000000000..e6c9fffc3
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-request-params-exception/response.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [RequestParamsException](index.md) / [response](./response.md)
+
+# response
+
+`val response: Response`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.exception/-response-exception/-init-.md b/docs/api/net/com.drake.net.exception/-response-exception/-init-.md
new file mode 100644
index 000000000..7e50f33a2
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-response-exception/-init-.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [ResponseException](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`ResponseException(response: Response, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "")`
+
+对应网络请求后台定义的错误信息
+
diff --git a/docs/api/net/com.drake.net.exception/-response-exception/index.md b/docs/api/net/com.drake.net.exception/-response-exception/index.md
new file mode 100644
index 000000000..0c34d4e6b
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-response-exception/index.md
@@ -0,0 +1,13 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [ResponseException](./index.md)
+
+# ResponseException
+
+`class ResponseException : `[`NetException`](../-net-exception/index.md)
+
+对应网络请求后台定义的错误信息
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | 对应网络请求后台定义的错误信息`ResponseException(response: Response, message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "")` |
diff --git a/docs/api/net/com.drake.net.exception/-server-response-exception/-init-.md b/docs/api/net/com.drake.net.exception/-server-response-exception/-init-.md
new file mode 100644
index 000000000..bec629346
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-server-response-exception/-init-.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [ServerResponseException](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`ServerResponseException(response: Response)`
+
+500
+
diff --git a/docs/api/net/com.drake.net.exception/-server-response-exception/index.md b/docs/api/net/com.drake.net.exception/-server-response-exception/index.md
new file mode 100644
index 000000000..0d3ec0513
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-server-response-exception/index.md
@@ -0,0 +1,19 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [ServerResponseException](./index.md)
+
+# ServerResponseException
+
+`class ServerResponseException : `[`NetException`](../-net-exception/index.md)
+
+500
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | 500`ServerResponseException(response: Response)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [response](response.md) | `val response: Response` |
diff --git a/docs/api/net/com.drake.net.exception/-server-response-exception/response.md b/docs/api/net/com.drake.net.exception/-server-response-exception/response.md
new file mode 100644
index 000000000..202ab7fb8
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-server-response-exception/response.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [ServerResponseException](index.md) / [response](./response.md)
+
+# response
+
+`val response: Response`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.exception/-u-r-l-parse-exception/-init-.md b/docs/api/net/com.drake.net.exception/-u-r-l-parse-exception/-init-.md
new file mode 100644
index 000000000..9dbd5b50b
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-u-r-l-parse-exception/-init-.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [URLParseException](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`URLParseException(url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)`
+
+URL地址错误
+
diff --git a/docs/api/net/com.drake.net.exception/-u-r-l-parse-exception/index.md b/docs/api/net/com.drake.net.exception/-u-r-l-parse-exception/index.md
new file mode 100644
index 000000000..d86678358
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-u-r-l-parse-exception/index.md
@@ -0,0 +1,19 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [URLParseException](./index.md)
+
+# URLParseException
+
+`open class URLParseException : `[`Exception`](https://docs.oracle.com/javase/6/docs/api/java/lang/Exception.html)
+
+URL地址错误
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | URL地址错误`URLParseException(url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [url](url.md) | `val url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
diff --git a/docs/api/net/com.drake.net.exception/-u-r-l-parse-exception/url.md b/docs/api/net/com.drake.net.exception/-u-r-l-parse-exception/url.md
new file mode 100644
index 000000000..e72d4fe20
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/-u-r-l-parse-exception/url.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [URLParseException](index.md) / [url](./url.md)
+
+# url
+
+`val url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.exception/index.md b/docs/api/net/com.drake.net.exception/index.md
new file mode 100644
index 000000000..2a1e27523
--- /dev/null
+++ b/docs/api/net/com.drake.net.exception/index.md
@@ -0,0 +1,25 @@
+[net](../index.md) / [com.drake.net.exception](./index.md)
+
+## Package com.drake.net.exception
+
+### Exceptions
+
+| Name | Summary |
+|---|---|
+| [ConvertException](-convert-exception/index.md) | 转换数据异常`class ConvertException : `[`NetException`](-net-exception/index.md) |
+| [DownloadFileException](-download-file-exception/index.md) | 下载文件异常`class DownloadFileException : `[`NetException`](-net-exception/index.md) |
+| [NetCancellationException](-net-cancellation-exception/index.md) | 取消网络任务的异常`class NetCancellationException : `[`CancellationException`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/CancellationException.html) |
+| [NetException](-net-exception/index.md) | Net网络异常`open class NetException : `[`IOException`](https://docs.oracle.com/javase/6/docs/api/java/io/IOException.html) |
+| [NetSocketTimeoutException](-net-socket-timeout-exception/index.md) | `class NetSocketTimeoutException : `[`NetException`](-net-exception/index.md) |
+| [NetworkingException](-networking-exception/index.md) | `class NetworkingException : `[`NetException`](-net-exception/index.md) |
+| [NoCacheException](-no-cache-exception/index.md) | `class NoCacheException : `[`NetException`](-net-exception/index.md) |
+| [RequestParamsException](-request-params-exception/index.md) | 404`class RequestParamsException : `[`NetException`](-net-exception/index.md) |
+| [ResponseException](-response-exception/index.md) | 对应网络请求后台定义的错误信息`class ResponseException : `[`NetException`](-net-exception/index.md) |
+| [ServerResponseException](-server-response-exception/index.md) | 500`class ServerResponseException : `[`NetException`](-net-exception/index.md) |
+| [URLParseException](-u-r-l-parse-exception/index.md) | URL地址错误`open class URLParseException : `[`Exception`](https://docs.oracle.com/javase/6/docs/api/java/lang/Exception.html) |
+
+### Extensions for External Classes
+
+| Name | Summary |
+|---|---|
+| [kotlinx.coroutines.CoroutineScope](kotlinx.coroutines.-coroutine-scope/index.md) | |
diff --git a/docs/api/net/com.drake.net.error/kotlinx.coroutines.-coroutine-scope/-net-cancellation-exception.md b/docs/api/net/com.drake.net.exception/kotlinx.coroutines.-coroutine-scope/-net-cancellation-exception.md
similarity index 63%
rename from docs/api/net/com.drake.net.error/kotlinx.coroutines.-coroutine-scope/-net-cancellation-exception.md
rename to docs/api/net/com.drake.net.exception/kotlinx.coroutines.-coroutine-scope/-net-cancellation-exception.md
index e0411b9a9..064fbb29b 100644
--- a/docs/api/net/com.drake.net.error/kotlinx.coroutines.-coroutine-scope/-net-cancellation-exception.md
+++ b/docs/api/net/com.drake.net.exception/kotlinx.coroutines.-coroutine-scope/-net-cancellation-exception.md
@@ -1,4 +1,4 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [kotlinx.coroutines.CoroutineScope](index.md) / [NetCancellationException](./-net-cancellation-exception.md)
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [kotlinx.coroutines.CoroutineScope](index.md) / [NetCancellationException](./-net-cancellation-exception.md)
# NetCancellationException
diff --git a/docs/api/net/com.drake.net.error/kotlinx.coroutines.-coroutine-scope/index.md b/docs/api/net/com.drake.net.exception/kotlinx.coroutines.-coroutine-scope/index.md
similarity index 79%
rename from docs/api/net/com.drake.net.error/kotlinx.coroutines.-coroutine-scope/index.md
rename to docs/api/net/com.drake.net.exception/kotlinx.coroutines.-coroutine-scope/index.md
index f3fcbe312..6d8d1ff23 100644
--- a/docs/api/net/com.drake.net.error/kotlinx.coroutines.-coroutine-scope/index.md
+++ b/docs/api/net/com.drake.net.exception/kotlinx.coroutines.-coroutine-scope/index.md
@@ -1,4 +1,4 @@
-[net](../../index.md) / [com.drake.net.error](../index.md) / [kotlinx.coroutines.CoroutineScope](./index.md)
+[net](../../index.md) / [com.drake.net.exception](../index.md) / [kotlinx.coroutines.CoroutineScope](./index.md)
### Extensions for kotlinx.coroutines.CoroutineScope
diff --git a/docs/api/net/com.drake.net.interceptor/-log-record-interceptor/-init-.md b/docs/api/net/com.drake.net.interceptor/-log-record-interceptor/-init-.md
new file mode 100644
index 000000000..1559effdd
--- /dev/null
+++ b/docs/api/net/com.drake.net.interceptor/-log-record-interceptor/-init-.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.interceptor](../index.md) / [LogRecordInterceptor](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`LogRecordInterceptor(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`)`
+
+网络日志记录器
+可以参考此拦截器为项目中其他网络请求库配置. 本拦截器属于标准的OkHttp拦截器适用于所有OkHttp拦截器内核的网络请求库
+
diff --git a/docs/api/net/com.drake.net.interceptor/-log-record-interceptor/index.md b/docs/api/net/com.drake.net.interceptor/-log-record-interceptor/index.md
new file mode 100644
index 000000000..1da3014ef
--- /dev/null
+++ b/docs/api/net/com.drake.net.interceptor/-log-record-interceptor/index.md
@@ -0,0 +1,20 @@
+[net](../../index.md) / [com.drake.net.interceptor](../index.md) / [LogRecordInterceptor](./index.md)
+
+# LogRecordInterceptor
+
+`class LogRecordInterceptor : Interceptor`
+
+网络日志记录器
+可以参考此拦截器为项目中其他网络请求库配置. 本拦截器属于标准的OkHttp拦截器适用于所有OkHttp拦截器内核的网络请求库
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | 网络日志记录器 可以参考此拦截器为项目中其他网络请求库配置. 本拦截器属于标准的OkHttp拦截器适用于所有OkHttp拦截器内核的网络请求库`LogRecordInterceptor(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`)` |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [intercept](intercept.md) | `fun intercept(chain: Chain): Response` |
diff --git a/docs/api/net/com.drake.net.interceptor/-log-record-interceptor/intercept.md b/docs/api/net/com.drake.net.interceptor/-log-record-interceptor/intercept.md
new file mode 100644
index 000000000..61efeef84
--- /dev/null
+++ b/docs/api/net/com.drake.net.interceptor/-log-record-interceptor/intercept.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.interceptor](../index.md) / [LogRecordInterceptor](index.md) / [intercept](./intercept.md)
+
+# intercept
+
+`fun intercept(chain: Chain): Response`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.interceptor/-request-interceptor/index.md b/docs/api/net/com.drake.net.interceptor/-request-interceptor/index.md
new file mode 100644
index 000000000..eaa2c46f3
--- /dev/null
+++ b/docs/api/net/com.drake.net.interceptor/-request-interceptor/index.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.interceptor](../index.md) / [RequestInterceptor](./index.md)
+
+# RequestInterceptor
+
+`interface RequestInterceptor`
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [interceptor](interceptor.md) | 当你使用Net发起请求的时候就会触发该拦截器 该拦截器属于轻量级不具备重发的功能, 一般用于请求参数的修改 请勿在这里进行请求重发可能会导致死循环`abstract fun interceptor(request: `[`BaseRequest`](../../com.drake.net.request/-base-request/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net.interceptor/-request-interceptor/interceptor.md b/docs/api/net/com.drake.net.interceptor/-request-interceptor/interceptor.md
new file mode 100644
index 000000000..811adb522
--- /dev/null
+++ b/docs/api/net/com.drake.net.interceptor/-request-interceptor/interceptor.md
@@ -0,0 +1,10 @@
+[net](../../index.md) / [com.drake.net.interceptor](../index.md) / [RequestInterceptor](index.md) / [interceptor](./interceptor.md)
+
+# interceptor
+
+`abstract fun interceptor(request: `[`BaseRequest`](../../com.drake.net.request/-base-request/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+当你使用Net发起请求的时候就会触发该拦截器
+该拦截器属于轻量级不具备重发的功能, 一般用于请求参数的修改
+请勿在这里进行请求重发可能会导致死循环
+
diff --git a/docs/api/net/com.drake.net.interceptor/index.md b/docs/api/net/com.drake.net.interceptor/index.md
new file mode 100644
index 000000000..cb633cce5
--- /dev/null
+++ b/docs/api/net/com.drake.net.interceptor/index.md
@@ -0,0 +1,10 @@
+[net](../index.md) / [com.drake.net.interceptor](./index.md)
+
+## Package com.drake.net.interceptor
+
+### Types
+
+| Name | Summary |
+|---|---|
+| [LogRecordInterceptor](-log-record-interceptor/index.md) | 网络日志记录器 可以参考此拦截器为项目中其他网络请求库配置. 本拦截器属于标准的OkHttp拦截器适用于所有OkHttp拦截器内核的网络请求库`class LogRecordInterceptor : Interceptor` |
+| [RequestInterceptor](-request-interceptor/index.md) | `interface RequestInterceptor` |
diff --git a/docs/api/net/com.drake.net.interfaces/-net-callback/-init-.md b/docs/api/net/com.drake.net.interfaces/-net-callback/-init-.md
new file mode 100644
index 000000000..0ef4c9530
--- /dev/null
+++ b/docs/api/net/com.drake.net.interfaces/-net-callback/-init-.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.interfaces](../index.md) / [NetCallback](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`NetCallback()`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.interfaces/-net-callback/index.md b/docs/api/net/com.drake.net.interfaces/-net-callback/index.md
new file mode 100644
index 000000000..ea7de20af
--- /dev/null
+++ b/docs/api/net/com.drake.net.interfaces/-net-callback/index.md
@@ -0,0 +1,21 @@
+[net](../../index.md) / [com.drake.net.interfaces](../index.md) / [NetCallback](./index.md)
+
+# NetCallback
+
+`abstract class NetCallback : Callback`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `NetCallback()` |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [onComplete](on-complete.md) | 请求完成`fun onComplete(call: Call, e: `[`IOException`](https://docs.oracle.com/javase/6/docs/api/java/io/IOException.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [onError](on-error.md) | 请求错误`fun onError(call: Call, e: `[`IOException`](https://docs.oracle.com/javase/6/docs/api/java/io/IOException.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [onFailure](on-failure.md) | `open fun onFailure(call: Call, e: `[`IOException`](https://docs.oracle.com/javase/6/docs/api/java/io/IOException.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [onResponse](on-response.md) | `open fun onResponse(call: Call, response: Response): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [onSuccess](on-success.md) | 请求成功`abstract fun onSuccess(call: Call, data: T): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net.interfaces/-net-callback/on-complete.md b/docs/api/net/com.drake.net.interfaces/-net-callback/on-complete.md
new file mode 100644
index 000000000..70bf301dc
--- /dev/null
+++ b/docs/api/net/com.drake.net.interfaces/-net-callback/on-complete.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.interfaces](../index.md) / [NetCallback](index.md) / [onComplete](./on-complete.md)
+
+# onComplete
+
+`fun onComplete(call: Call, e: `[`IOException`](https://docs.oracle.com/javase/6/docs/api/java/io/IOException.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+请求完成
+
+### Parameters
+
+`e` - 正常结束则为NULL, 发生异常结束则为异常对象
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.interfaces/-net-callback/on-error.md b/docs/api/net/com.drake.net.interfaces/-net-callback/on-error.md
new file mode 100644
index 000000000..d3c98e76a
--- /dev/null
+++ b/docs/api/net/com.drake.net.interfaces/-net-callback/on-error.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.interfaces](../index.md) / [NetCallback](index.md) / [onError](./on-error.md)
+
+# onError
+
+`fun onError(call: Call, e: `[`IOException`](https://docs.oracle.com/javase/6/docs/api/java/io/IOException.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+请求错误
+
diff --git a/docs/api/net/com.drake.net.interfaces/-net-callback/on-failure.md b/docs/api/net/com.drake.net.interfaces/-net-callback/on-failure.md
new file mode 100644
index 000000000..5bf5c830b
--- /dev/null
+++ b/docs/api/net/com.drake.net.interfaces/-net-callback/on-failure.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.interfaces](../index.md) / [NetCallback](index.md) / [onFailure](./on-failure.md)
+
+# onFailure
+
+`open fun onFailure(call: Call, e: `[`IOException`](https://docs.oracle.com/javase/6/docs/api/java/io/IOException.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.interfaces/-net-callback/on-response.md b/docs/api/net/com.drake.net.interfaces/-net-callback/on-response.md
new file mode 100644
index 000000000..678d2fe46
--- /dev/null
+++ b/docs/api/net/com.drake.net.interfaces/-net-callback/on-response.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.interfaces](../index.md) / [NetCallback](index.md) / [onResponse](./on-response.md)
+
+# onResponse
+
+`open fun onResponse(call: Call, response: Response): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.interfaces/-net-callback/on-success.md b/docs/api/net/com.drake.net.interfaces/-net-callback/on-success.md
new file mode 100644
index 000000000..35c540a7d
--- /dev/null
+++ b/docs/api/net/com.drake.net.interfaces/-net-callback/on-success.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.interfaces](../index.md) / [NetCallback](index.md) / [onSuccess](./on-success.md)
+
+# onSuccess
+
+`abstract fun onSuccess(call: Call, data: T): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+请求成功
+
diff --git a/docs/api/net/com.drake.net.interfaces/index.md b/docs/api/net/com.drake.net.interfaces/index.md
new file mode 100644
index 000000000..190787a62
--- /dev/null
+++ b/docs/api/net/com.drake.net.interfaces/index.md
@@ -0,0 +1,9 @@
+[net](../index.md) / [com.drake.net.interfaces](./index.md)
+
+## Package com.drake.net.interfaces
+
+### Types
+
+| Name | Summary |
+|---|---|
+| [NetCallback](-net-callback/index.md) | `abstract class NetCallback : Callback` |
diff --git a/docs/api/net/com.drake.net.log/-log-recorder/enabled.md b/docs/api/net/com.drake.net.log/-log-recorder/enabled.md
new file mode 100644
index 000000000..df44586e6
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-log-recorder/enabled.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [LogRecorder](index.md) / [enabled](./enabled.md)
+
+# enabled
+
+`@JvmStatic var enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)
+
+是否启用日志记录器
+
+### Property
+
+`enabled` - 是否启用日志记录器
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-log-recorder/generate-id.md b/docs/api/net/com.drake.net.log/-log-recorder/generate-id.md
new file mode 100644
index 000000000..88460a9ed
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-log-recorder/generate-id.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [LogRecorder](index.md) / [generateId](./generate-id.md)
+
+# generateId
+
+`@JvmStatic @Synchronized fun generateId(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
+
+产生一个唯一的基于时间戳Id
+
diff --git a/docs/api/net/com.drake.net.log/-log-recorder/index.md b/docs/api/net/com.drake.net.log/-log-recorder/index.md
new file mode 100644
index 000000000..44d3191e7
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-log-recorder/index.md
@@ -0,0 +1,22 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [LogRecorder](./index.md)
+
+# LogRecorder
+
+`object LogRecorder`
+
+日志记录器
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [enabled](enabled.md) | 是否启用日志记录器`var enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [generateId](generate-id.md) | 产生一个唯一的基于时间戳Id`fun generateId(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [recordException](record-exception.md) | 发送请求异常到记录器`fun recordException(id: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, requestMillis: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`, code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`?, response: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, errorMessage: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [recordRequest](record-request.md) | 发送请求信息到记录器中`fun recordRequest(id: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, method: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, headers: `[`Map`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>>, body: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [recordResponse](record-response.md) | 发送响应信息到记录器中`fun recordResponse(id: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, requestMillis: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`, code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, headers: `[`Map`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>>, body: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net.log/-log-recorder/record-exception.md b/docs/api/net/com.drake.net.log/-log-recorder/record-exception.md
new file mode 100644
index 000000000..0b74f6fd6
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-log-recorder/record-exception.md
@@ -0,0 +1,15 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [LogRecorder](index.md) / [recordException](./record-exception.md)
+
+# recordException
+
+`@JvmStatic fun recordException(id: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, requestMillis: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`, code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`?, response: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, errorMessage: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+发送请求异常到记录器
+
+### Parameters
+
+`id` - 请求的唯一标识符
+
+`requestMillis` - 请求时间毫秒值
+
+`errorMessage` - 错误信息, 如果存在\n换行符, 仅接受最后一行
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-log-recorder/record-request.md b/docs/api/net/com.drake.net.log/-log-recorder/record-request.md
new file mode 100644
index 000000000..85ecf7ead
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-log-recorder/record-request.md
@@ -0,0 +1,19 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [LogRecorder](index.md) / [recordRequest](./record-request.md)
+
+# recordRequest
+
+`@JvmStatic fun recordRequest(id: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, method: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, headers: `[`Map`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>>, body: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+发送请求信息到记录器中
+
+### Parameters
+
+`id` - 请求的唯一标识符
+
+`url` - 请求URL地址
+
+`method` - 请求方法
+
+`headers` - 请求头
+
+`body` - 请求体
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-log-recorder/record-response.md b/docs/api/net/com.drake.net.log/-log-recorder/record-response.md
new file mode 100644
index 000000000..869ac3896
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-log-recorder/record-response.md
@@ -0,0 +1,17 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [LogRecorder](index.md) / [recordResponse](./record-response.md)
+
+# recordResponse
+
+`@JvmStatic fun recordResponse(id: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, requestMillis: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`, code: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, headers: `[`Map`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>>, body: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+发送响应信息到记录器中
+
+### Parameters
+
+`id` - 请求的唯一标识符
+
+`code` - 响应码
+
+`headers` - 响应头
+
+`body` - 响应体
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-b-o-d-y.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-b-o-d-y.md
new file mode 100644
index 000000000..e27dc0d2a
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-b-o-d-y.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [REQUEST_BODY](./-r-e-q-u-e-s-t_-b-o-d-y.md)
+
+# REQUEST_BODY
+
+`REQUEST_BODY`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-e-n-d.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-e-n-d.md
new file mode 100644
index 000000000..21f39fcf8
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-e-n-d.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [REQUEST_END](./-r-e-q-u-e-s-t_-e-n-d.md)
+
+# REQUEST_END
+
+`REQUEST_END`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-h-e-a-d-e-r.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-h-e-a-d-e-r.md
new file mode 100644
index 000000000..1feb033db
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-h-e-a-d-e-r.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [REQUEST_HEADER](./-r-e-q-u-e-s-t_-h-e-a-d-e-r.md)
+
+# REQUEST_HEADER
+
+`REQUEST_HEADER`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-m-e-t-h-o-d.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-m-e-t-h-o-d.md
new file mode 100644
index 000000000..90d633ab4
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-m-e-t-h-o-d.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [REQUEST_METHOD](./-r-e-q-u-e-s-t_-m-e-t-h-o-d.md)
+
+# REQUEST_METHOD
+
+`REQUEST_METHOD`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-t-i-m-e.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-t-i-m-e.md
new file mode 100644
index 000000000..586be6139
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-t-i-m-e.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [REQUEST_TIME](./-r-e-q-u-e-s-t_-t-i-m-e.md)
+
+# REQUEST_TIME
+
+`REQUEST_TIME`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-u-r-l.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-u-r-l.md
new file mode 100644
index 000000000..3097411b0
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-q-u-e-s-t_-u-r-l.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [REQUEST_URL](./-r-e-q-u-e-s-t_-u-r-l.md)
+
+# REQUEST_URL
+
+`REQUEST_URL`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-b-o-d-y.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-b-o-d-y.md
new file mode 100644
index 000000000..6c29b25d4
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-b-o-d-y.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [RESPONSE_BODY](./-r-e-s-p-o-n-s-e_-b-o-d-y.md)
+
+# RESPONSE_BODY
+
+`RESPONSE_BODY`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-e-n-d.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-e-n-d.md
new file mode 100644
index 000000000..b99d98ffd
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-e-n-d.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [RESPONSE_END](./-r-e-s-p-o-n-s-e_-e-n-d.md)
+
+# RESPONSE_END
+
+`RESPONSE_END`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-e-r-r-o-r.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-e-r-r-o-r.md
new file mode 100644
index 000000000..0787562da
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-e-r-r-o-r.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [RESPONSE_ERROR](./-r-e-s-p-o-n-s-e_-e-r-r-o-r.md)
+
+# RESPONSE_ERROR
+
+`RESPONSE_ERROR`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-h-e-a-d-e-r.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-h-e-a-d-e-r.md
new file mode 100644
index 000000000..1802111a1
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-h-e-a-d-e-r.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [RESPONSE_HEADER](./-r-e-s-p-o-n-s-e_-h-e-a-d-e-r.md)
+
+# RESPONSE_HEADER
+
+`RESPONSE_HEADER`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-s-t-a-t-u-s.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-s-t-a-t-u-s.md
new file mode 100644
index 000000000..e93a1e23b
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-s-t-a-t-u-s.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [RESPONSE_STATUS](./-r-e-s-p-o-n-s-e_-s-t-a-t-u-s.md)
+
+# RESPONSE_STATUS
+
+`RESPONSE_STATUS`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-t-i-m-e.md b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-t-i-m-e.md
new file mode 100644
index 000000000..fdb50be27
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-r-e-s-p-o-n-s-e_-t-i-m-e.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [RESPONSE_TIME](./-r-e-s-p-o-n-s-e_-t-i-m-e.md)
+
+# RESPONSE_TIME
+
+`RESPONSE_TIME`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/-u-n-k-n-o-w-n.md b/docs/api/net/com.drake.net.log/-message-type/-u-n-k-n-o-w-n.md
new file mode 100644
index 000000000..d40087d52
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/-u-n-k-n-o-w-n.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [UNKNOWN](./-u-n-k-n-o-w-n.md)
+
+# UNKNOWN
+
+`UNKNOWN`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/-message-type/index.md b/docs/api/net/com.drake.net.log/-message-type/index.md
new file mode 100644
index 000000000..d70423883
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/index.md
@@ -0,0 +1,29 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](./index.md)
+
+# MessageType
+
+`enum class MessageType`
+
+### Enum Values
+
+| Name | Summary |
+|---|---|
+| [REQUEST_URL](-r-e-q-u-e-s-t_-u-r-l.md) | |
+| [REQUEST_TIME](-r-e-q-u-e-s-t_-t-i-m-e.md) | |
+| [REQUEST_METHOD](-r-e-q-u-e-s-t_-m-e-t-h-o-d.md) | |
+| [REQUEST_HEADER](-r-e-q-u-e-s-t_-h-e-a-d-e-r.md) | |
+| [REQUEST_BODY](-r-e-q-u-e-s-t_-b-o-d-y.md) | |
+| [REQUEST_END](-r-e-q-u-e-s-t_-e-n-d.md) | |
+| [RESPONSE_TIME](-r-e-s-p-o-n-s-e_-t-i-m-e.md) | |
+| [RESPONSE_STATUS](-r-e-s-p-o-n-s-e_-s-t-a-t-u-s.md) | |
+| [RESPONSE_HEADER](-r-e-s-p-o-n-s-e_-h-e-a-d-e-r.md) | |
+| [RESPONSE_BODY](-r-e-s-p-o-n-s-e_-b-o-d-y.md) | |
+| [RESPONSE_END](-r-e-s-p-o-n-s-e_-e-n-d.md) | |
+| [RESPONSE_ERROR](-r-e-s-p-o-n-s-e_-e-r-r-o-r.md) | |
+| [UNKNOWN](-u-n-k-n-o-w-n.md) | |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [type](type.md) | `var type: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
diff --git a/docs/api/net/com.drake.net.log/-message-type/type.md b/docs/api/net/com.drake.net.log/-message-type/type.md
new file mode 100644
index 000000000..04ff3f04c
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/-message-type/type.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.log](../index.md) / [MessageType](index.md) / [type](./type.md)
+
+# type
+
+`var type: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.log/index.md b/docs/api/net/com.drake.net.log/index.md
new file mode 100644
index 000000000..993ffbb1f
--- /dev/null
+++ b/docs/api/net/com.drake.net.log/index.md
@@ -0,0 +1,10 @@
+[net](../index.md) / [com.drake.net.log](./index.md)
+
+## Package com.drake.net.log
+
+### Types
+
+| Name | Summary |
+|---|---|
+| [LogRecorder](-log-recorder/index.md) | 日志记录器`object LogRecorder` |
+| [MessageType](-message-type/index.md) | `enum class MessageType` |
diff --git a/docs/api/net/com.drake.net.request/-base-request/-init-.md b/docs/api/net/com.drake.net.request/-base-request/-init-.md
new file mode 100644
index 000000000..dae0a88bb
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/-init-.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`BaseRequest()`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/add-download-listener.md b/docs/api/net/com.drake.net.request/-base-request/add-download-listener.md
new file mode 100644
index 000000000..60fd26b4d
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/add-download-listener.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [addDownloadListener](./add-download-listener.md)
+
+# addDownloadListener
+
+`fun addDownloadListener(progressListener: `[`ProgressListener`](../-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+下载监听器
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/add-header.md b/docs/api/net/com.drake.net.request/-base-request/add-header.md
new file mode 100644
index 000000000..abef254bf
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/add-header.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [addHeader](./add-header.md)
+
+# addHeader
+
+`fun addHeader(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+添加请求头
+如果已存在相同`name`的请求头会添加而不会覆盖, 因为请求头本身存在多个值
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/build-request.md b/docs/api/net/com.drake.net.request/-base-request/build-request.md
new file mode 100644
index 000000000..e58f11251
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/build-request.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [buildRequest](./build-request.md)
+
+# buildRequest
+
+`open fun buildRequest(): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/converter.md b/docs/api/net/com.drake.net.request/-base-request/converter.md
new file mode 100644
index 000000000..14601f3c1
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/converter.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [converter](./converter.md)
+
+# converter
+
+`open var converter: `[`NetConverter`](../../com.drake.net.convert/-net-converter/index.md)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/download-listeners.md b/docs/api/net/com.drake.net.request/-base-request/download-listeners.md
new file mode 100644
index 000000000..6424666cb
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/download-listeners.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [downloadListeners](./download-listeners.md)
+
+# downloadListeners
+
+`protected val downloadListeners: DownloadListeners`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/enqueue.md b/docs/api/net/com.drake.net.request/-base-request/enqueue.md
new file mode 100644
index 000000000..839f46d87
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/enqueue.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [enqueue](./enqueue.md)
+
+# enqueue
+
+`fun enqueue(block: Callback): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/http-url.md b/docs/api/net/com.drake.net.request/-base-request/http-url.md
new file mode 100644
index 000000000..7ae8eb3e2
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/http-url.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [httpUrl](./http-url.md)
+
+# httpUrl
+
+`open var httpUrl: Builder`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/index.md b/docs/api/net/com.drake.net.request/-base-request/index.md
new file mode 100644
index 000000000..8940fc348
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/index.md
@@ -0,0 +1,58 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](./index.md)
+
+# BaseRequest
+
+`abstract class BaseRequest`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `BaseRequest()` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [converter](converter.md) | `open var converter: `[`NetConverter`](../../com.drake.net.convert/-net-converter/index.md) |
+| [downloadListeners](download-listeners.md) | `val downloadListeners: DownloadListeners` |
+| [httpUrl](http-url.md) | `open var httpUrl: Builder` |
+| [method](method.md) | `open var method: `[`Method`](../-method/index.md) |
+| [okHttpClient](ok-http-client.md) | `var okHttpClient: OkHttpClient` |
+| [okHttpRequest](ok-http-request.md) | `open var okHttpRequest: Builder` |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [addDownloadListener](add-download-listener.md) | 下载监听器`fun addDownloadListener(progressListener: `[`ProgressListener`](../-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [addHeader](add-header.md) | 添加请求头 如果已存在相同`name`的请求头会添加而不会覆盖, 因为请求头本身存在多个值`fun addHeader(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [buildRequest](build-request.md) | `open fun buildRequest(): ` |
+| [enqueue](enqueue.md) | `fun enqueue(block: Callback): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [param](param.md) | `abstract fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, encoded: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`abstract fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Number`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-number/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`abstract fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [removeHeader](remove-header.md) | 删除请求头`fun removeHeader(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setCache](set-cache.md) | 设置缓存策略`fun setCache(cache: `[`Cache`](../../com.drake.net.cache/-cache/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setCacheControl](set-cache-control.md) | 设置请求头的缓存控制`fun setCacheControl(cacheControl: CacheControl): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setCacheKey](set-cache-key.md) | `fun setCacheKey(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setClient](set-client.md) | 修改当前Request的OkHttpClient配置, 不会影响全局默认的OkHttpClient`fun setClient(block: Builder.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setDownloadDir](set-download-dir.md) | 下载文件的保存目录`fun setDownloadDir(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`fun setDownloadDir(name: `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setDownloadFileName](set-download-file-name.md) | 下载文件名`fun setDownloadFileName(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setDownloadFileNameConflict](set-download-file-name-conflict.md) | 假设下载文件路径已存在同名文件是否重命名, 例如`file_name(1).apk``fun setDownloadFileNameConflict(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setDownloadFileNameDecode](set-download-file-name-decode.md) | 文件名称是否使用URL解码 例如下载的文件名如果是中文, 服务器传输给你的会是被URL编码的字符串. 你使用URL解码后才是可读的中文名称`fun setDownloadFileNameDecode(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setDownloadMd5Verify](set-download-md5-verify.md) | 如果服务器返回 "Content-MD5"响应头和制定路径已经存在的文件MD5相同是否直接返回File`fun setDownloadMd5Verify(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setDownloadTempFile](set-download-temp-file.md) | 下载是否使用临时文件 避免下载失败后覆盖同名文件或者无法判别是否已下载完整, 仅在下载完整以后才会显示为原有文件名 临时文件命名规则: 文件名 + .net-download 下载文件名: install.apk, 临时文件名: install.apk.net-download`fun setDownloadTempFile(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setGroup](set-group.md) | 分组`fun setGroup(group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setHeader](set-header.md) | 设置请求头, 会覆盖请求头而不像[addHeader](add-header.md)是添加`fun setHeader(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setHeaders](set-headers.md) | 批量设置请求头`fun setHeaders(headers: Headers): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setId](set-id.md) | 唯一的Id`fun setId(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setPath](set-path.md) | `fun setPath(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, encoded: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setQuery](set-query.md) | `fun setQuery(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, encoded: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setTag](set-tag.md) | 将一个任意对象添加到Request对象中, 一般用于在拦截器或者转换器中被获取到标签, 针对某个请求的特殊业务逻辑 使用`Request.tag()`获取标签`fun setTag(tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
添加标签 使用`Request.tag(name)`得到指定标签`fun setTag(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [setUrl](set-url.md) | 设置一个Url字符串, 其参数不会和你初始化时设置的主域名[NetConfig.host](../../com.drake.net/-net-config/host.md)进行拼接 一般情况下我建议使用更为聪明的[setPath](set-path.md)`open fun setUrl(url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`open fun setUrl(url: HttpUrl): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`open fun setUrl(url: `[`URL`](https://docs.oracle.com/javase/6/docs/api/java/net/URL.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+
+### Inheritors
+
+| Name | Summary |
+|---|---|
+| [BodyRequest](../-body-request/index.md) | `class BodyRequest : `[`BaseRequest`](./index.md) |
+| [UrlRequest](../-url-request/index.md) | `class UrlRequest : `[`BaseRequest`](./index.md) |
diff --git a/docs/api/net/com.drake.net.request/-base-request/method.md b/docs/api/net/com.drake.net.request/-base-request/method.md
new file mode 100644
index 000000000..2ae18263b
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/method.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [method](./method.md)
+
+# method
+
+`open var method: `[`Method`](../-method/index.md)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/ok-http-client.md b/docs/api/net/com.drake.net.request/-base-request/ok-http-client.md
new file mode 100644
index 000000000..df0f61658
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/ok-http-client.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [okHttpClient](./ok-http-client.md)
+
+# okHttpClient
+
+`var okHttpClient: OkHttpClient`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/ok-http-request.md b/docs/api/net/com.drake.net.request/-base-request/ok-http-request.md
new file mode 100644
index 000000000..0427a9082
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/ok-http-request.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [okHttpRequest](./ok-http-request.md)
+
+# okHttpRequest
+
+`open var okHttpRequest: Builder`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/param.md b/docs/api/net/com.drake.net.request/-base-request/param.md
new file mode 100644
index 000000000..2e6742b17
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/param.md
@@ -0,0 +1,7 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [param](./param.md)
+
+# param
+
+`abstract fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, encoded: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`abstract fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Number`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-number/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`abstract fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/remove-header.md b/docs/api/net/com.drake.net.request/-base-request/remove-header.md
new file mode 100644
index 000000000..e23b9208e
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/remove-header.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [removeHeader](./remove-header.md)
+
+# removeHeader
+
+`fun removeHeader(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+删除请求头
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-cache-control.md b/docs/api/net/com.drake.net.request/-base-request/set-cache-control.md
new file mode 100644
index 000000000..d8bcbb623
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-cache-control.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setCacheControl](./set-cache-control.md)
+
+# setCacheControl
+
+`fun setCacheControl(cacheControl: CacheControl): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+设置请求头的缓存控制
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-cache-key.md b/docs/api/net/com.drake.net.request/-base-request/set-cache-key.md
new file mode 100644
index 000000000..275cc3d61
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-cache-key.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setCacheKey](./set-cache-key.md)
+
+# setCacheKey
+
+`fun setCacheKey(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-cache.md b/docs/api/net/com.drake.net.request/-base-request/set-cache.md
new file mode 100644
index 000000000..72bd7011f
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-cache.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setCache](./set-cache.md)
+
+# setCache
+
+`fun setCache(cache: `[`Cache`](../../com.drake.net.cache/-cache/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+设置缓存策略
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-client.md b/docs/api/net/com.drake.net.request/-base-request/set-client.md
new file mode 100644
index 000000000..ed5024c84
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-client.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setClient](./set-client.md)
+
+# setClient
+
+`fun setClient(block: Builder.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+修改当前Request的OkHttpClient配置, 不会影响全局默认的OkHttpClient
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-download-dir.md b/docs/api/net/com.drake.net.request/-base-request/set-download-dir.md
new file mode 100644
index 000000000..4a4774607
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-download-dir.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setDownloadDir](./set-download-dir.md)
+
+# setDownloadDir
+
+`fun setDownloadDir(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+下载文件的保存目录
+
+`fun setDownloadDir(name: `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-download-file-name-conflict.md b/docs/api/net/com.drake.net.request/-base-request/set-download-file-name-conflict.md
new file mode 100644
index 000000000..8618dcfdf
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-download-file-name-conflict.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setDownloadFileNameConflict](./set-download-file-name-conflict.md)
+
+# setDownloadFileNameConflict
+
+`fun setDownloadFileNameConflict(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+假设下载文件路径已存在同名文件是否重命名, 例如`file_name(1).apk`
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-download-file-name-decode.md b/docs/api/net/com.drake.net.request/-base-request/set-download-file-name-decode.md
new file mode 100644
index 000000000..9bb663d55
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-download-file-name-decode.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setDownloadFileNameDecode](./set-download-file-name-decode.md)
+
+# setDownloadFileNameDecode
+
+`fun setDownloadFileNameDecode(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+文件名称是否使用URL解码
+例如下载的文件名如果是中文, 服务器传输给你的会是被URL编码的字符串. 你使用URL解码后才是可读的中文名称
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-download-file-name.md b/docs/api/net/com.drake.net.request/-base-request/set-download-file-name.md
new file mode 100644
index 000000000..2167955ca
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-download-file-name.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setDownloadFileName](./set-download-file-name.md)
+
+# setDownloadFileName
+
+`fun setDownloadFileName(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+下载文件名
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-download-md5-verify.md b/docs/api/net/com.drake.net.request/-base-request/set-download-md5-verify.md
new file mode 100644
index 000000000..2e38b3156
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-download-md5-verify.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setDownloadMd5Verify](./set-download-md5-verify.md)
+
+# setDownloadMd5Verify
+
+`fun setDownloadMd5Verify(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+如果服务器返回 "Content-MD5"响应头和制定路径已经存在的文件MD5相同是否直接返回File
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-download-temp-file.md b/docs/api/net/com.drake.net.request/-base-request/set-download-temp-file.md
new file mode 100644
index 000000000..fd2061666
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-download-temp-file.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setDownloadTempFile](./set-download-temp-file.md)
+
+# setDownloadTempFile
+
+`fun setDownloadTempFile(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+下载是否使用临时文件
+避免下载失败后覆盖同名文件或者无法判别是否已下载完整, 仅在下载完整以后才会显示为原有文件名
+临时文件命名规则: 文件名 + .net-download
+ 下载文件名: install.apk, 临时文件名: install.apk.net-download
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-group.md b/docs/api/net/com.drake.net.request/-base-request/set-group.md
new file mode 100644
index 000000000..ebfbdd03b
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-group.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setGroup](./set-group.md)
+
+# setGroup
+
+`fun setGroup(group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+分组
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-header.md b/docs/api/net/com.drake.net.request/-base-request/set-header.md
new file mode 100644
index 000000000..dc56ed2f7
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-header.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setHeader](./set-header.md)
+
+# setHeader
+
+`fun setHeader(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+设置请求头, 会覆盖请求头而不像[addHeader](add-header.md)是添加
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-headers.md b/docs/api/net/com.drake.net.request/-base-request/set-headers.md
new file mode 100644
index 000000000..61f0abb9a
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-headers.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setHeaders](./set-headers.md)
+
+# setHeaders
+
+`fun setHeaders(headers: Headers): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+批量设置请求头
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-id.md b/docs/api/net/com.drake.net.request/-base-request/set-id.md
new file mode 100644
index 000000000..ed5b62906
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-id.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setId](./set-id.md)
+
+# setId
+
+`fun setId(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+唯一的Id
+
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-path.md b/docs/api/net/com.drake.net.request/-base-request/set-path.md
new file mode 100644
index 000000000..5a624e2a0
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-path.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setPath](./set-path.md)
+
+# setPath
+
+`fun setPath(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, encoded: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+### Parameters
+
+`path` - 如果其不包含http/https则会自动拼接[NetConfig.host](../../com.drake.net/-net-config/host.md)
+
+`encoded` - 是否已经进行过URLEncoder编码
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-query.md b/docs/api/net/com.drake.net.request/-base-request/set-query.md
new file mode 100644
index 000000000..d551ab3b8
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-query.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setQuery](./set-query.md)
+
+# setQuery
+
+`fun setQuery(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, encoded: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-tag.md b/docs/api/net/com.drake.net.request/-base-request/set-tag.md
new file mode 100644
index 000000000..2d74bb451
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-tag.md
@@ -0,0 +1,19 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setTag](./set-tag.md)
+
+# setTag
+
+`fun setTag(tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+将一个任意对象添加到Request对象中, 一般用于在拦截器或者转换器中被获取到标签, 针对某个请求的特殊业务逻辑
+使用`Request.tag()`获取标签
+
+`fun setTag(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+添加标签
+使用`Request.tag(name)`得到指定标签
+
+### Parameters
+
+`name` - 标签名称
+
+`tag` - 标签
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-base-request/set-url.md b/docs/api/net/com.drake.net.request/-base-request/set-url.md
new file mode 100644
index 000000000..1e94213fd
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-base-request/set-url.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BaseRequest](index.md) / [setUrl](./set-url.md)
+
+# setUrl
+
+`open fun setUrl(url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+设置一个Url字符串, 其参数不会和你初始化时设置的主域名[NetConfig.host](../../com.drake.net/-net-config/host.md)进行拼接
+一般情况下我建议使用更为聪明的[setPath](set-path.md)
+
+`open fun setUrl(url: HttpUrl): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`open fun setUrl(url: `[`URL`](https://docs.oracle.com/javase/6/docs/api/java/net/URL.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-body-request/-init-.md b/docs/api/net/com.drake.net.request/-body-request/-init-.md
new file mode 100644
index 000000000..ea061d516
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/-init-.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`BodyRequest()`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-body-request/add-upload-listener.md b/docs/api/net/com.drake.net.request/-body-request/add-upload-listener.md
new file mode 100644
index 000000000..c28b80fd7
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/add-upload-listener.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [addUploadListener](./add-upload-listener.md)
+
+# addUploadListener
+
+`fun addUploadListener(progressListener: `[`ProgressListener`](../-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+上传进度监听器
+
diff --git a/docs/api/net/com.drake.net.request/-body-request/body.md b/docs/api/net/com.drake.net.request/-body-request/body.md
new file mode 100644
index 000000000..47b378a9f
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/body.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [body](./body.md)
+
+# body
+
+`var body: RequestBody?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-body-request/build-request.md b/docs/api/net/com.drake.net.request/-body-request/build-request.md
new file mode 100644
index 000000000..de026aa2d
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/build-request.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [buildRequest](./build-request.md)
+
+# buildRequest
+
+`fun buildRequest(): Request`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-body-request/execute.md b/docs/api/net/com.drake.net.request/-body-request/execute.md
new file mode 100644
index 000000000..f2c260260
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/execute.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [execute](./execute.md)
+
+# execute
+
+`fun execute(): R`
+
+执行请求
+
diff --git a/docs/api/net/com.drake.net.request/-body-request/form-param.md b/docs/api/net/com.drake.net.request/-body-request/form-param.md
new file mode 100644
index 000000000..10f63b379
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/form-param.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [formParam](./form-param.md)
+
+# formParam
+
+`var formParam: Builder`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-body-request/index.md b/docs/api/net/com.drake.net.request/-body-request/index.md
new file mode 100644
index 000000000..380517454
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/index.md
@@ -0,0 +1,31 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](./index.md)
+
+# BodyRequest
+
+`class BodyRequest : `[`BaseRequest`](../-base-request/index.md)
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `BodyRequest()` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [body](body.md) | `var body: RequestBody?` |
+| [formParam](form-param.md) | `var formParam: Builder` |
+| [mediaType](media-type.md) | `var mediaType: MediaType` |
+| [method](method.md) | `var method: `[`Method`](../-method/index.md) |
+| [partParam](part-param.md) | `var partParam: Builder` |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [addUploadListener](add-upload-listener.md) | 上传进度监听器`fun addUploadListener(progressListener: `[`ProgressListener`](../-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [buildRequest](build-request.md) | `fun buildRequest(): Request` |
+| [execute](execute.md) | 执行请求`fun execute(): R` |
+| [json](json.md) | `fun json(body: `[`JSONObject`](https://developer.android.com/reference/org/json/JSONObject.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun json(body: `[`JSONArray`](https://developer.android.com/reference/org/json/JSONArray.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun json(body: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun json(body: `[`Map`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?>?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun json(vararg body: `[`Pair`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-pair/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?>): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [param](param.md) | `fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, encoded: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Number`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-number/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: RequestBody?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: ByteString?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`ByteArray`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-byte-array/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, values: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?>?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, fileName: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, value: `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(body: RequestBody, header: Headers? = null): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(body: Part): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net.request/-body-request/json.md b/docs/api/net/com.drake.net.request/-body-request/json.md
new file mode 100644
index 000000000..081f6f25f
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/json.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [json](./json.md)
+
+# json
+
+`fun json(body: `[`JSONObject`](https://developer.android.com/reference/org/json/JSONObject.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun json(body: `[`JSONArray`](https://developer.android.com/reference/org/json/JSONArray.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun json(body: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun json(body: `[`Map`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?>?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun json(vararg body: `[`Pair`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-pair/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?>): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-body-request/media-type.md b/docs/api/net/com.drake.net.request/-body-request/media-type.md
new file mode 100644
index 000000000..db5663e38
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/media-type.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [mediaType](./media-type.md)
+
+# mediaType
+
+`var mediaType: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-body-request/method.md b/docs/api/net/com.drake.net.request/-body-request/method.md
new file mode 100644
index 000000000..50d6e77bb
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/method.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [method](./method.md)
+
+# method
+
+`var method: `[`Method`](../-method/index.md)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-body-request/param.md b/docs/api/net/com.drake.net.request/-body-request/param.md
new file mode 100644
index 000000000..ff72f6d6d
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/param.md
@@ -0,0 +1,15 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [param](./param.md)
+
+# param
+
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, encoded: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Number`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-number/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: RequestBody?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: ByteString?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`ByteArray`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-byte-array/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, values: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?>?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, fileName: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, value: `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(body: RequestBody, header: Headers? = null): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(body: Part): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-body-request/part-param.md b/docs/api/net/com.drake.net.request/-body-request/part-param.md
new file mode 100644
index 000000000..16e0c13c3
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-body-request/part-param.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [BodyRequest](index.md) / [partParam](./part-param.md)
+
+# partParam
+
+`var partParam: Builder`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-method/-d-e-l-e-t-e.md b/docs/api/net/com.drake.net.request/-method/-d-e-l-e-t-e.md
new file mode 100644
index 000000000..1fefa77e8
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-method/-d-e-l-e-t-e.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Method](index.md) / [DELETE](./-d-e-l-e-t-e.md)
+
+# DELETE
+
+`DELETE`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-method/-g-e-t.md b/docs/api/net/com.drake.net.request/-method/-g-e-t.md
new file mode 100644
index 000000000..4a5207448
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-method/-g-e-t.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Method](index.md) / [GET](./-g-e-t.md)
+
+# GET
+
+`GET`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-method/-h-e-a-d.md b/docs/api/net/com.drake.net.request/-method/-h-e-a-d.md
new file mode 100644
index 000000000..793dcacb0
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-method/-h-e-a-d.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Method](index.md) / [HEAD](./-h-e-a-d.md)
+
+# HEAD
+
+`HEAD`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-method/-o-p-t-i-o-n-s.md b/docs/api/net/com.drake.net.request/-method/-o-p-t-i-o-n-s.md
new file mode 100644
index 000000000..1893ae278
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-method/-o-p-t-i-o-n-s.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Method](index.md) / [OPTIONS](./-o-p-t-i-o-n-s.md)
+
+# OPTIONS
+
+`OPTIONS`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-method/-p-a-t-c-h.md b/docs/api/net/com.drake.net.request/-method/-p-a-t-c-h.md
new file mode 100644
index 000000000..76e8e1e0e
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-method/-p-a-t-c-h.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Method](index.md) / [PATCH](./-p-a-t-c-h.md)
+
+# PATCH
+
+`PATCH`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-method/-p-o-s-t.md b/docs/api/net/com.drake.net.request/-method/-p-o-s-t.md
new file mode 100644
index 000000000..315d09c2d
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-method/-p-o-s-t.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Method](index.md) / [POST](./-p-o-s-t.md)
+
+# POST
+
+`POST`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-method/-p-u-t.md b/docs/api/net/com.drake.net.request/-method/-p-u-t.md
new file mode 100644
index 000000000..1f8052efd
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-method/-p-u-t.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Method](index.md) / [PUT](./-p-u-t.md)
+
+# PUT
+
+`PUT`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-method/-t-r-a-c-e.md b/docs/api/net/com.drake.net.request/-method/-t-r-a-c-e.md
new file mode 100644
index 000000000..0d47d5d7a
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-method/-t-r-a-c-e.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Method](index.md) / [TRACE](./-t-r-a-c-e.md)
+
+# TRACE
+
+`TRACE`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-method/index.md b/docs/api/net/com.drake.net.request/-method/index.md
new file mode 100644
index 000000000..888549e92
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-method/index.md
@@ -0,0 +1,18 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Method](./index.md)
+
+# Method
+
+`enum class Method`
+
+### Enum Values
+
+| Name | Summary |
+|---|---|
+| [GET](-g-e-t.md) | |
+| [HEAD](-h-e-a-d.md) | |
+| [OPTIONS](-o-p-t-i-o-n-s.md) | |
+| [TRACE](-t-r-a-c-e.md) | |
+| [POST](-p-o-s-t.md) | |
+| [DELETE](-d-e-l-e-t-e.md) | |
+| [PUT](-p-u-t.md) | |
+| [PATCH](-p-a-t-c-h.md) | |
diff --git a/docs/api/net/com.drake.net.request/-progress-listener/-init-.md b/docs/api/net/com.drake.net.request/-progress-listener/-init-.md
new file mode 100644
index 000000000..afb101f84
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress-listener/-init-.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [ProgressListener](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`ProgressListener(interval: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 500)`
+
+进度监听器, 为下载和上传两者
+
+### Parameters
+
+`interval` - 进度监听器刷新的间隔时间, 单位为毫秒, 默认值为500ms
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-progress-listener/elapsed-time.md b/docs/api/net/com.drake.net.request/-progress-listener/elapsed-time.md
new file mode 100644
index 000000000..cd17c210d
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress-listener/elapsed-time.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [ProgressListener](index.md) / [elapsedTime](./elapsed-time.md)
+
+# elapsedTime
+
+`var elapsedTime: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-progress-listener/index.md b/docs/api/net/com.drake.net.request/-progress-listener/index.md
new file mode 100644
index 000000000..e2ae27714
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress-listener/index.md
@@ -0,0 +1,31 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [ProgressListener](./index.md)
+
+# ProgressListener
+
+`abstract class ProgressListener`
+
+进度监听器, 为下载和上传两者
+
+### Parameters
+
+`interval` - 进度监听器刷新的间隔时间, 单位为毫秒, 默认值为500ms
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | 进度监听器, 为下载和上传两者`ProgressListener(interval: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 500)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [elapsedTime](elapsed-time.md) | `var elapsedTime: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+| [interval](interval.md) | 进度监听器刷新的间隔时间, 单位为毫秒, 默认值为500ms`var interval: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+| [progressBuffBytes](progress-buff-bytes.md) | `var progressBuffBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [onProgress](on-progress.md) | `abstract fun onProgress(p: `[`Progress`](../-progress/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net.request/-progress-listener/interval.md b/docs/api/net/com.drake.net.request/-progress-listener/interval.md
new file mode 100644
index 000000000..0a9c48482
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress-listener/interval.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [ProgressListener](index.md) / [interval](./interval.md)
+
+# interval
+
+`var interval: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
+
+进度监听器刷新的间隔时间, 单位为毫秒, 默认值为500ms
+
diff --git a/docs/api/net/com.drake.net.request/-progress-listener/on-progress.md b/docs/api/net/com.drake.net.request/-progress-listener/on-progress.md
new file mode 100644
index 000000000..5530ca75b
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress-listener/on-progress.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [ProgressListener](index.md) / [onProgress](./on-progress.md)
+
+# onProgress
+
+`abstract fun onProgress(p: `[`Progress`](../-progress/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-progress-listener/progress-buff-bytes.md b/docs/api/net/com.drake.net.request/-progress-listener/progress-buff-bytes.md
new file mode 100644
index 000000000..9ae364ce7
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress-listener/progress-buff-bytes.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [ProgressListener](index.md) / [progressBuffBytes](./progress-buff-bytes.md)
+
+# progressBuffBytes
+
+`var progressBuffBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-progress/-init-.md b/docs/api/net/com.drake.net.request/-progress/-init-.md
new file mode 100644
index 000000000..370a192d1
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/-init-.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`Progress(currentBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 0, totalBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 0, intervalBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 0, intervalTime: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 0, startElapsedRealtime: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = SystemClock.elapsedRealtime())`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-progress/current-bytes.md b/docs/api/net/com.drake.net.request/-progress/current-bytes.md
new file mode 100644
index 000000000..225b0dfce
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/current-bytes.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [currentBytes](./current-bytes.md)
+
+# currentBytes
+
+`var currentBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
+
+当前已经完成的字节数
+
+### Property
+
+`currentBytes` - 当前已经完成的字节数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-progress/current-size.md b/docs/api/net/com.drake.net.request/-progress/current-size.md
new file mode 100644
index 000000000..10f616e03
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/current-size.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [currentSize](./current-size.md)
+
+# currentSize
+
+`fun currentSize(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
+
+已完成文件大小
+根据字节数自动显示内存单位, 例如 19MB 或者 27KB
+
diff --git a/docs/api/net/com.drake.net.request/-progress/finish.md b/docs/api/net/com.drake.net.request/-progress/finish.md
new file mode 100644
index 000000000..55aca78a3
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/finish.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [finish](./finish.md)
+
+# finish
+
+`fun finish(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)
+
+是否完成
+
diff --git a/docs/api/net/com.drake.net.request/-progress/index.md b/docs/api/net/com.drake.net.request/-progress/index.md
new file mode 100644
index 000000000..32903bad4
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/index.md
@@ -0,0 +1,37 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](./index.md)
+
+# Progress
+
+`data class Progress`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `Progress(currentBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 0, totalBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 0, intervalBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 0, intervalTime: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 0, startElapsedRealtime: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = SystemClock.elapsedRealtime())` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [currentBytes](current-bytes.md) | 当前已经完成的字节数`var currentBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+| [intervalBytes](interval-bytes.md) | 进度间隔时间内完成的字节数`var intervalBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+| [intervalTime](interval-time.md) | 距离上次进度变化间隔时间`var intervalTime: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+| [speedBytes](speed-bytes.md) | 每秒下载速度, 字节单位`var speedBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+| [startElapsedRealtime](start-elapsed-realtime.md) | 开始下载的时间`val startElapsedRealtime: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+| [totalBytes](total-bytes.md) | 当前已经完成的字节数`var totalBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [currentSize](current-size.md) | 已完成文件大小 根据字节数自动显示内存单位, 例如 19MB 或者 27KB`fun currentSize(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [finish](finish.md) | 是否完成`fun finish(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [progress](progress.md) | 请求或者响应的进度, 值范围在0-100`fun progress(): `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) |
+| [remainSize](remain-size.md) | 剩余大小 根据字节数自动显示内存单位, 例如 19MB 或者 27KB`fun remainSize(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [remainTime](remain-time.md) | 剩余时间`fun remainTime(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [remainTimeSeconds](remain-time-seconds.md) | 剩余时间`fun remainTimeSeconds(): `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
+| [speedSize](speed-size.md) | 每秒下载速度 根据字节数自动显示内存单位, 例如 19MB 或者 27KB`fun speedSize(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [totalSize](total-size.md) | 文件全部大小 根据字节数自动显示内存单位, 例如 19MB 或者 27KB`fun totalSize(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [useTime](use-time.md) | 已使用时间`fun useTime(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [useTimeSeconds](use-time-seconds.md) | 已使用时间`fun useTimeSeconds(): `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html) |
diff --git a/docs/api/net/com.drake.net.request/-progress/interval-bytes.md b/docs/api/net/com.drake.net.request/-progress/interval-bytes.md
new file mode 100644
index 000000000..c9afc786a
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/interval-bytes.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [intervalBytes](./interval-bytes.md)
+
+# intervalBytes
+
+`var intervalBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
+
+进度间隔时间内完成的字节数
+
+### Property
+
+`intervalBytes` - 进度间隔时间内完成的字节数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-progress/interval-time.md b/docs/api/net/com.drake.net.request/-progress/interval-time.md
new file mode 100644
index 000000000..db22a7910
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/interval-time.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [intervalTime](./interval-time.md)
+
+# intervalTime
+
+`var intervalTime: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
+
+距离上次进度变化间隔时间
+
+### Property
+
+`intervalTime` - 距离上次进度变化间隔时间
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-progress/progress.md b/docs/api/net/com.drake.net.request/-progress/progress.md
new file mode 100644
index 000000000..b17a5dfe3
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/progress.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [progress](./progress.md)
+
+# progress
+
+`fun progress(): `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)
+
+请求或者响应的进度, 值范围在0-100
+
diff --git a/docs/api/net/com.drake.net.request/-progress/remain-size.md b/docs/api/net/com.drake.net.request/-progress/remain-size.md
new file mode 100644
index 000000000..8d554af59
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/remain-size.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [remainSize](./remain-size.md)
+
+# remainSize
+
+`fun remainSize(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
+
+剩余大小
+根据字节数自动显示内存单位, 例如 19MB 或者 27KB
+
diff --git a/docs/api/net/com.drake.net.request/-progress/remain-time-seconds.md b/docs/api/net/com.drake.net.request/-progress/remain-time-seconds.md
new file mode 100644
index 000000000..395625a60
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/remain-time-seconds.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [remainTimeSeconds](./remain-time-seconds.md)
+
+# remainTimeSeconds
+
+`fun remainTimeSeconds(): `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
+
+剩余时间
+
+**Return**
+秒
+
diff --git a/docs/api/net/com.drake.net.request/-progress/remain-time.md b/docs/api/net/com.drake.net.request/-progress/remain-time.md
new file mode 100644
index 000000000..12004433f
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/remain-time.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [remainTime](./remain-time.md)
+
+# remainTime
+
+`fun remainTime(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
+
+剩余时间
+
diff --git a/docs/api/net/com.drake.net.request/-progress/speed-bytes.md b/docs/api/net/com.drake.net.request/-progress/speed-bytes.md
new file mode 100644
index 000000000..04817b18c
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/speed-bytes.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [speedBytes](./speed-bytes.md)
+
+# speedBytes
+
+`var speedBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
+
+每秒下载速度, 字节单位
+
diff --git a/docs/api/net/com.drake.net.request/-progress/speed-size.md b/docs/api/net/com.drake.net.request/-progress/speed-size.md
new file mode 100644
index 000000000..fee0d773b
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/speed-size.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [speedSize](./speed-size.md)
+
+# speedSize
+
+`fun speedSize(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
+
+每秒下载速度
+根据字节数自动显示内存单位, 例如 19MB 或者 27KB
+
diff --git a/docs/api/net/com.drake.net.request/-progress/start-elapsed-realtime.md b/docs/api/net/com.drake.net.request/-progress/start-elapsed-realtime.md
new file mode 100644
index 000000000..572ca1b93
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/start-elapsed-realtime.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [startElapsedRealtime](./start-elapsed-realtime.md)
+
+# startElapsedRealtime
+
+`val startElapsedRealtime: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
+
+开始下载的时间
+
+### Property
+
+`startElapsedRealtime` - 开始下载的时间
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-progress/total-bytes.md b/docs/api/net/com.drake.net.request/-progress/total-bytes.md
new file mode 100644
index 000000000..dddb70faf
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/total-bytes.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [totalBytes](./total-bytes.md)
+
+# totalBytes
+
+`var totalBytes: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
+
+当前已经完成的字节数
+
+### Property
+
+`totalBytes` - 当前已经完成的字节数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-progress/total-size.md b/docs/api/net/com.drake.net.request/-progress/total-size.md
new file mode 100644
index 000000000..fb0e4f3c9
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/total-size.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [totalSize](./total-size.md)
+
+# totalSize
+
+`fun totalSize(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
+
+文件全部大小
+根据字节数自动显示内存单位, 例如 19MB 或者 27KB
+
diff --git a/docs/api/net/com.drake.net.request/-progress/use-time-seconds.md b/docs/api/net/com.drake.net.request/-progress/use-time-seconds.md
new file mode 100644
index 000000000..c59e09703
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/use-time-seconds.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [useTimeSeconds](./use-time-seconds.md)
+
+# useTimeSeconds
+
+`fun useTimeSeconds(): `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)
+
+已使用时间
+
+**Return**
+秒
+
diff --git a/docs/api/net/com.drake.net.request/-progress/use-time.md b/docs/api/net/com.drake.net.request/-progress/use-time.md
new file mode 100644
index 000000000..7117dac82
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-progress/use-time.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [Progress](index.md) / [useTime](./use-time.md)
+
+# useTime
+
+`fun useTime(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
+
+已使用时间
+
diff --git a/docs/api/net/com.drake.net.request/-url-request/-init-.md b/docs/api/net/com.drake.net.request/-url-request/-init-.md
new file mode 100644
index 000000000..a0f5efb77
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-url-request/-init-.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [UrlRequest](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`UrlRequest()`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/-url-request/execute.md b/docs/api/net/com.drake.net.request/-url-request/execute.md
new file mode 100644
index 000000000..825463654
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-url-request/execute.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [UrlRequest](index.md) / [execute](./execute.md)
+
+# execute
+
+`fun execute(): R`
+
+执行请求
+
diff --git a/docs/api/net/com.drake.net.request/-url-request/index.md b/docs/api/net/com.drake.net.request/-url-request/index.md
new file mode 100644
index 000000000..c03122f72
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-url-request/index.md
@@ -0,0 +1,18 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [UrlRequest](./index.md)
+
+# UrlRequest
+
+`class UrlRequest : `[`BaseRequest`](../-base-request/index.md)
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `UrlRequest()` |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [execute](execute.md) | 执行请求`fun execute(): R` |
+| [param](param.md) | `fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, encoded: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Number`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-number/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net.request/-url-request/param.md b/docs/api/net/com.drake.net.request/-url-request/param.md
new file mode 100644
index 000000000..19b786b12
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/-url-request/param.md
@@ -0,0 +1,7 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [UrlRequest](index.md) / [param](./param.md)
+
+# param
+
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, encoded: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Number`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-number/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`fun param(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, value: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/index.md b/docs/api/net/com.drake.net.request/index.md
new file mode 100644
index 000000000..89569704e
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/index.md
@@ -0,0 +1,22 @@
+[net](../index.md) / [com.drake.net.request](./index.md)
+
+## Package com.drake.net.request
+
+### Types
+
+| Name | Summary |
+|---|---|
+| [BaseRequest](-base-request/index.md) | `abstract class BaseRequest` |
+| [BodyRequest](-body-request/index.md) | `class BodyRequest : `[`BaseRequest`](-base-request/index.md) |
+| [Method](-method/index.md) | `enum class Method` |
+| [Progress](-progress/index.md) | `data class Progress` |
+| [ProgressListener](-progress-listener/index.md) | 进度监听器, 为下载和上传两者`abstract class ProgressListener` |
+| [UrlRequest](-url-request/index.md) | `class UrlRequest : `[`BaseRequest`](-base-request/index.md) |
+
+### Extensions for External Classes
+
+| Name | Summary |
+|---|---|
+| [okhttp3.MediaType](okhttp3.-media-type/index.md) | |
+| [okhttp3.Request](okhttp3.-request/index.md) | |
+| [okhttp3.Request.Builder](okhttp3.-request.-builder/index.md) | |
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-f-o-r-m.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-f-o-r-m.md
new file mode 100644
index 000000000..e8633798a
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-f-o-r-m.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [FORM](./-f-o-r-m.md)
+
+# FORM
+
+`val MediaType.Companion.FORM: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-g-i-f.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-g-i-f.md
new file mode 100644
index 000000000..c0800a06a
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-g-i-f.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [GIF](./-g-i-f.md)
+
+# GIF
+
+`val MediaType.Companion.GIF: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-h-t-m-l.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-h-t-m-l.md
new file mode 100644
index 000000000..2ba2e7dc7
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-h-t-m-l.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [HTML](./-h-t-m-l.md)
+
+# HTML
+
+`val MediaType.Companion.HTML: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-i-m-g.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-i-m-g.md
new file mode 100644
index 000000000..18b32d276
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-i-m-g.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [IMG](./-i-m-g.md)
+
+# IMG
+
+`val MediaType.Companion.IMG: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-j-p-e-g.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-j-p-e-g.md
new file mode 100644
index 000000000..8fbda5cb8
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-j-p-e-g.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [JPEG](./-j-p-e-g.md)
+
+# JPEG
+
+`val MediaType.Companion.JPEG: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-j-s-o-n.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-j-s-o-n.md
new file mode 100644
index 000000000..8395c4acf
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-j-s-o-n.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [JSON](./-j-s-o-n.md)
+
+# JSON
+
+`val MediaType.Companion.JSON: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-m-p4.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-m-p4.md
new file mode 100644
index 000000000..1dd3a3c5b
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-m-p4.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [MP4](./-m-p4.md)
+
+# MP4
+
+`val MediaType.Companion.MP4: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-p-n-g.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-p-n-g.md
new file mode 100644
index 000000000..427ffd6db
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-p-n-g.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [PNG](./-p-n-g.md)
+
+# PNG
+
+`val MediaType.Companion.PNG: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-t-x-t.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-t-x-t.md
new file mode 100644
index 000000000..d59a3d0e8
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-t-x-t.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [TXT](./-t-x-t.md)
+
+# TXT
+
+`val MediaType.Companion.TXT: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-u-r-l-e-n-c-o-d-e-d.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-u-r-l-e-n-c-o-d-e-d.md
new file mode 100644
index 000000000..41b89d08b
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-u-r-l-e-n-c-o-d-e-d.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [URLENCODED](./-u-r-l-e-n-c-o-d-e-d.md)
+
+# URLENCODED
+
+`val MediaType.Companion.URLENCODED: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/-x-m-l.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-x-m-l.md
new file mode 100644
index 000000000..b2174538a
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/-x-m-l.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](index.md) / [XML](./-x-m-l.md)
+
+# XML
+
+`val MediaType.Companion.XML: MediaType`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-media-type/index.md b/docs/api/net/com.drake.net.request/okhttp3.-media-type/index.md
new file mode 100644
index 000000000..73d5f75b8
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-media-type/index.md
@@ -0,0 +1,17 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.MediaType](./index.md)
+
+### Extensions for okhttp3.MediaType
+
+| Name | Summary |
+|---|---|
+| [FORM](-f-o-r-m.md) | `val MediaType.Companion.FORM: MediaType` |
+| [GIF](-g-i-f.md) | `val MediaType.Companion.GIF: MediaType` |
+| [HTML](-h-t-m-l.md) | `val MediaType.Companion.HTML: MediaType` |
+| [IMG](-i-m-g.md) | `val MediaType.Companion.IMG: MediaType` |
+| [JPEG](-j-p-e-g.md) | `val MediaType.Companion.JPEG: MediaType` |
+| [JSON](-j-s-o-n.md) | `val MediaType.Companion.JSON: MediaType` |
+| [MP4](-m-p4.md) | `val MediaType.Companion.MP4: MediaType` |
+| [PNG](-p-n-g.md) | `val MediaType.Companion.PNG: MediaType` |
+| [TXT](-t-x-t.md) | `val MediaType.Companion.TXT: MediaType` |
+| [URLENCODED](-u-r-l-e-n-c-o-d-e-d.md) | `val MediaType.Companion.URLENCODED: MediaType` |
+| [XML](-x-m-l.md) | `val MediaType.Companion.XML: MediaType` |
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/index.md b/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/index.md
new file mode 100644
index 000000000..135d33091
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/index.md
@@ -0,0 +1,10 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request.Builder](./index.md)
+
+### Extensions for okhttp3.Request.Builder
+
+| Name | Summary |
+|---|---|
+| [setConverter](set-converter.md) | `fun Builder.setConverter(converter: `[`NetConverter`](../../com.drake.net.convert/-net-converter/index.md)`): ` |
+| [setGroup](set-group.md) | `fun Builder.setGroup(group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): ` |
+| [setId](set-id.md) | `fun Builder.setId(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): ` |
+| [setLabel](set-label.md) | `fun Builder.setLabel(any: T): ` |
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-converter.md b/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-converter.md
new file mode 100644
index 000000000..4f4e3bb36
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-converter.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request.Builder](index.md) / [setConverter](./set-converter.md)
+
+# setConverter
+
+`fun Builder.setConverter(converter: `[`NetConverter`](../../com.drake.net.convert/-net-converter/index.md)`): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-group.md b/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-group.md
new file mode 100644
index 000000000..b27ab225e
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-group.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request.Builder](index.md) / [setGroup](./set-group.md)
+
+# setGroup
+
+`fun Builder.setGroup(group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-id.md b/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-id.md
new file mode 100644
index 000000000..5e7862464
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-id.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request.Builder](index.md) / [setId](./set-id.md)
+
+# setId
+
+`fun Builder.setId(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-label.md b/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-label.md
new file mode 100644
index 000000000..7871b9421
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request.-builder/set-label.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request.Builder](index.md) / [setLabel](./set-label.md)
+
+# setLabel
+
+`fun Builder.setLabel(any: T): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/converter.md b/docs/api/net/com.drake.net.request/okhttp3.-request/converter.md
new file mode 100644
index 000000000..de2aba67e
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/converter.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [converter](./converter.md)
+
+# converter
+
+`fun Request.converter(): `[`NetConverter`](../../com.drake.net.convert/-net-converter/index.md)`?`
+
+转换器
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/download-conflict-rename.md b/docs/api/net/com.drake.net.request/okhttp3.-request/download-conflict-rename.md
new file mode 100644
index 000000000..62fa61dfc
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/download-conflict-rename.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [downloadConflictRename](./download-conflict-rename.md)
+
+# downloadConflictRename
+
+`fun Request.downloadConflictRename(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?`
+
+当指定下载目录存在同名文件是覆盖还是进行重命名, 重命名规则是: $文件名_($序号).$后缀
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/download-file-dir.md b/docs/api/net/com.drake.net.request/okhttp3.-request/download-file-dir.md
new file mode 100644
index 000000000..d468fe649
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/download-file-dir.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [downloadFileDir](./download-file-dir.md)
+
+# downloadFileDir
+
+`fun Request.downloadFileDir(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
+
+下载文件目录
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/download-file-name-decode.md b/docs/api/net/com.drake.net.request/okhttp3.-request/download-file-name-decode.md
new file mode 100644
index 000000000..c93b26931
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/download-file-name-decode.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [downloadFileNameDecode](./download-file-name-decode.md)
+
+# downloadFileNameDecode
+
+`fun Request.downloadFileNameDecode(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?`
+
+下载的文件名称是否解码
+例如下载的文件名如果是中文, 服务器传输给你的会是被URL编码的字符串. 你使用URL解码后才是可读的中文名称
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/download-listeners.md b/docs/api/net/com.drake.net.request/okhttp3.-request/download-listeners.md
new file mode 100644
index 000000000..02d521001
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/download-listeners.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [downloadListeners](./download-listeners.md)
+
+# downloadListeners
+
+`fun Request.downloadListeners(): `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../-progress-listener/index.md)`>?`
+
+下载监听器
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/download-md5-verify.md b/docs/api/net/com.drake.net.request/okhttp3.-request/download-md5-verify.md
new file mode 100644
index 000000000..76852161b
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/download-md5-verify.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [downloadMd5Verify](./download-md5-verify.md)
+
+# downloadMd5Verify
+
+`fun Request.downloadMd5Verify(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?`
+
+是否进行校验文件md5, 如果校验则匹配上既马上返回文件而不会进行下载
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/download-temp-file.md b/docs/api/net/com.drake.net.request/okhttp3.-request/download-temp-file.md
new file mode 100644
index 000000000..f829e45fa
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/download-temp-file.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [downloadTempFile](./download-temp-file.md)
+
+# downloadTempFile
+
+`fun Request.downloadTempFile(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?`
+
+下载是否使用临时文件
+避免下载失败后覆盖同名文件或者无法判别是否已下载完整, 仅在下载完整以后才会显示为原有文件名
+临时文件命名规则: 文件名 + .net-download
+ 下载文件名: install.apk, 临时文件名: install.apk.net-download
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/file-name.md b/docs/api/net/com.drake.net.request/okhttp3.-request/file-name.md
new file mode 100644
index 000000000..c2b6c3df3
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/file-name.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [fileName](./file-name.md)
+
+# fileName
+
+`fun Request.fileName(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?`
+
+下载文件名
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/group.md b/docs/api/net/com.drake.net.request/okhttp3.-request/group.md
new file mode 100644
index 000000000..75be2fc77
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/group.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [group](./group.md)
+
+# group
+
+`fun Request.group(): `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?`
+
+请求的分组名
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/id.md b/docs/api/net/com.drake.net.request/okhttp3.-request/id.md
new file mode 100644
index 000000000..e4d675266
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/id.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [id](./id.md)
+
+# id
+
+`fun Request.id(): `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?`
+
+请求的Id
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/index.md b/docs/api/net/com.drake.net.request/okhttp3.-request/index.md
new file mode 100644
index 000000000..876b27eae
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/index.md
@@ -0,0 +1,19 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](./index.md)
+
+### Extensions for okhttp3.Request
+
+| Name | Summary |
+|---|---|
+| [converter](converter.md) | 转换器`fun Request.converter(): `[`NetConverter`](../../com.drake.net.convert/-net-converter/index.md)`?` |
+| [downloadConflictRename](download-conflict-rename.md) | 当指定下载目录存在同名文件是覆盖还是进行重命名, 重命名规则是: $文件名_($序号).$后缀`fun Request.downloadConflictRename(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?` |
+| [downloadFileDir](download-file-dir.md) | 下载文件目录`fun Request.downloadFileDir(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [downloadFileNameDecode](download-file-name-decode.md) | 下载的文件名称是否解码 例如下载的文件名如果是中文, 服务器传输给你的会是被URL编码的字符串. 你使用URL解码后才是可读的中文名称`fun Request.downloadFileNameDecode(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?` |
+| [downloadListeners](download-listeners.md) | 下载监听器`fun Request.downloadListeners(): `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../-progress-listener/index.md)`>?` |
+| [downloadMd5Verify](download-md5-verify.md) | 是否进行校验文件md5, 如果校验则匹配上既马上返回文件而不会进行下载`fun Request.downloadMd5Verify(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?` |
+| [downloadTempFile](download-temp-file.md) | 下载是否使用临时文件 避免下载失败后覆盖同名文件或者无法判别是否已下载完整, 仅在下载完整以后才会显示为原有文件名 临时文件命名规则: 文件名 + .net-download 下载文件名: install.apk, 临时文件名: install.apk.net-download`fun Request.downloadTempFile(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`?` |
+| [fileName](file-name.md) | 下载文件名`fun Request.fileName(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [group](group.md) | 请求的分组名`fun Request.group(): `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?` |
+| [id](id.md) | 请求的Id`fun Request.id(): `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?` |
+| [label](label.md) | `fun Request.label(): T?` |
+| [tag](tag.md) | 请求标签`fun Request.tag(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?` |
+| [uploadListeners](upload-listeners.md) | 上传监听器`fun Request.uploadListeners(): `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../-progress-listener/index.md)`>?` |
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/label.md b/docs/api/net/com.drake.net.request/okhttp3.-request/label.md
new file mode 100644
index 000000000..f412a9fdd
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/label.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [label](./label.md)
+
+# label
+
+`fun Request.label(): T?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/tag.md b/docs/api/net/com.drake.net.request/okhttp3.-request/tag.md
new file mode 100644
index 000000000..13cf778d9
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/tag.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [tag](./tag.md)
+
+# tag
+
+`fun Request.tag(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?`
+
+请求标签
+
diff --git a/docs/api/net/com.drake.net.request/okhttp3.-request/upload-listeners.md b/docs/api/net/com.drake.net.request/okhttp3.-request/upload-listeners.md
new file mode 100644
index 000000000..dd88b267e
--- /dev/null
+++ b/docs/api/net/com.drake.net.request/okhttp3.-request/upload-listeners.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.request](../index.md) / [okhttp3.Request](index.md) / [uploadListeners](./upload-listeners.md)
+
+# uploadListeners
+
+`fun Request.uploadListeners(): `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../-progress-listener/index.md)`>?`
+
+上传监听器
+
diff --git a/docs/api/net/com.drake.net.response/index.md b/docs/api/net/com.drake.net.response/index.md
new file mode 100644
index 000000000..3bc8a41d2
--- /dev/null
+++ b/docs/api/net/com.drake.net.response/index.md
@@ -0,0 +1,9 @@
+[net](../index.md) / [com.drake.net.response](./index.md)
+
+## Package com.drake.net.response
+
+### Extensions for External Classes
+
+| Name | Summary |
+|---|---|
+| [okhttp3.Response](okhttp3.-response/index.md) | |
diff --git a/docs/api/net/com.drake.net.response/okhttp3.-response/file-name.md b/docs/api/net/com.drake.net.response/okhttp3.-response/file-name.md
new file mode 100644
index 000000000..d711a33d3
--- /dev/null
+++ b/docs/api/net/com.drake.net.response/okhttp3.-response/file-name.md
@@ -0,0 +1,12 @@
+[net](../../index.md) / [com.drake.net.response](../index.md) / [okhttp3.Response](index.md) / [fileName](./file-name.md)
+
+# fileName
+
+`fun Response.fileName(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
+
+按照以下顺序返回最终的下载文件的名称
+
+1. 指定文件名
+2. 响应头文件名
+3. 请求URL路径
+4. 时间戳
diff --git a/docs/api/net/com.drake.net.response/okhttp3.-response/file.md b/docs/api/net/com.drake.net.response/okhttp3.-response/file.md
new file mode 100644
index 000000000..32a98e8f9
--- /dev/null
+++ b/docs/api/net/com.drake.net.response/okhttp3.-response/file.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.response](../index.md) / [okhttp3.Response](index.md) / [file](./file.md)
+
+# file
+
+`fun Response.file(): `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?`
+
+下载到指定文件
+
diff --git a/docs/api/net/com.drake.net.response/okhttp3.-response/index.md b/docs/api/net/com.drake.net.response/okhttp3.-response/index.md
new file mode 100644
index 000000000..1fa0282a6
--- /dev/null
+++ b/docs/api/net/com.drake.net.response/okhttp3.-response/index.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.response](../index.md) / [okhttp3.Response](./index.md)
+
+### Extensions for okhttp3.Response
+
+| Name | Summary |
+|---|---|
+| [file](file.md) | 下载到指定文件`fun Response.file(): `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?` |
+| [fileName](file-name.md) | 按照以下顺序返回最终的下载文件的名称`fun Response.fileName(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
diff --git a/docs/api/net/com.drake.net.scope/-android-scope/adjust-dispatcher.md b/docs/api/net/com.drake.net.scope/-android-scope/adjust-dispatcher.md
deleted file mode 100644
index aedd2e6a3..000000000
--- a/docs/api/net/com.drake.net.scope/-android-scope/adjust-dispatcher.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.scope](../index.md) / [AndroidScope](index.md) / [adjustDispatcher](./adjust-dispatcher.md)
-
-# adjustDispatcher
-
-`protected fun adjustDispatcher(): CoroutineDispatcher`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.scope/-android-scope/close.md b/docs/api/net/com.drake.net.scope/-android-scope/close.md
new file mode 100644
index 000000000..01356f647
--- /dev/null
+++ b/docs/api/net/com.drake.net.scope/-android-scope/close.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.scope](../index.md) / [AndroidScope](index.md) / [close](./close.md)
+
+# close
+
+`open fun close(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.scope/-android-scope/index.md b/docs/api/net/com.drake.net.scope/-android-scope/index.md
index 053519eec..81e985359 100644
--- a/docs/api/net/com.drake.net.scope/-android-scope/index.md
+++ b/docs/api/net/com.drake.net.scope/-android-scope/index.md
@@ -2,7 +2,7 @@
# AndroidScope
-`open class AndroidScope : CoroutineScope`
+`open class AndroidScope : CoroutineScope, `[`Closeable`](https://docs.oracle.com/javase/6/docs/api/java/io/Closeable.html)
异步协程作用域
@@ -20,7 +20,7 @@
| [coroutineContext](coroutine-context.md) | `open val coroutineContext: `[`CoroutineContext`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines/-coroutine-context/index.html) |
| [dispatcher](dispatcher.md) | `val dispatcher: CoroutineDispatcher` |
| [finally](finally.md) | `var finally: (`[`AndroidScope`](./index.md)`.(`[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`?) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)?` |
-| [uid](uid.md) | `val uid: CoroutineExceptionHandler` |
+| [scopeGroup](scope-group.md) | `val scopeGroup: CoroutineExceptionHandler` |
### Functions
@@ -28,6 +28,7 @@
|---|---|
| [cancel](cancel.md) | `open fun cancel(cause: CancellationException? = null): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`open fun cancel(message: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, cause: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`? = null): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
| [catch](catch.md) | `open fun catch(e: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
当作用域内发生异常时回调`open fun catch(block: `[`AndroidScope`](./index.md)`.(`[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): `[`AndroidScope`](./index.md) |
+| [close](close.md) | `open fun close(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
| [finally](finally.md) | `open fun finally(e: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
无论正常或者异常结束都将最终执行`open fun finally(block: `[`AndroidScope`](./index.md)`.(`[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`?) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): `[`AndroidScope`](./index.md) |
| [handleError](handle-error.md) | 错误处理`open fun handleError(e: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
| [launch](launch.md) | `open fun launch(block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](./index.md) |
diff --git a/docs/api/net/com.drake.net.scope/-android-scope/scope-group.md b/docs/api/net/com.drake.net.scope/-android-scope/scope-group.md
new file mode 100644
index 000000000..489c3cc64
--- /dev/null
+++ b/docs/api/net/com.drake.net.scope/-android-scope/scope-group.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net.scope](../index.md) / [AndroidScope](index.md) / [scopeGroup](./scope-group.md)
+
+# scopeGroup
+
+`val scopeGroup: CoroutineExceptionHandler`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.scope/-android-scope/start.md b/docs/api/net/com.drake.net.scope/-android-scope/start.md
deleted file mode 100644
index d177779e6..000000000
--- a/docs/api/net/com.drake.net.scope/-android-scope/start.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.scope](../index.md) / [AndroidScope](index.md) / [start](./start.md)
-
-# start
-
-`protected open fun start(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.scope/-android-scope/uid.md b/docs/api/net/com.drake.net.scope/-android-scope/uid.md
deleted file mode 100644
index 0526e697b..000000000
--- a/docs/api/net/com.drake.net.scope/-android-scope/uid.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.scope](../index.md) / [AndroidScope](index.md) / [uid](./uid.md)
-
-# uid
-
-`val uid: CoroutineExceptionHandler`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.scope/-net-coroutine-scope/cache.md b/docs/api/net/com.drake.net.scope/-net-coroutine-scope/cache.md
deleted file mode 100644
index 10e6fc95e..000000000
--- a/docs/api/net/com.drake.net.scope/-net-coroutine-scope/cache.md
+++ /dev/null
@@ -1,18 +0,0 @@
-[net](../../index.md) / [com.drake.net.scope](../index.md) / [NetCoroutineScope](index.md) / [cache](./cache.md)
-
-# cache
-
-`fun cache(error: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, animate: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, onCache: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../-android-scope/index.md)
-
-该函数一般用于缓存读取
-只在第一次启动作用域时回调
-该函数在作用域[launch](launch.md)之前执行
-函数内部所有的异常都不会被抛出, 也不会终止作用域执行
-
-### Parameters
-
-`error` - 是否在缓存读取成功但网络请求错误时吐司错误信息
-
-`animate` - 是否在缓存成功后依然显示加载动画
-
-`onCache` - 该作用域内的所有异常都算缓存读取失败, 不会吐司和打印任何错误
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.scope/-net-coroutine-scope/on-cache.md b/docs/api/net/com.drake.net.scope/-net-coroutine-scope/on-cache.md
deleted file mode 100644
index d2370279c..000000000
--- a/docs/api/net/com.drake.net.scope/-net-coroutine-scope/on-cache.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.scope](../index.md) / [NetCoroutineScope](index.md) / [onCache](./on-cache.md)
-
-# onCache
-
-`protected var onCache: (suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.scope/index.md b/docs/api/net/com.drake.net.scope/index.md
index 4d17e8b0f..7a8193193 100644
--- a/docs/api/net/com.drake.net.scope/index.md
+++ b/docs/api/net/com.drake.net.scope/index.md
@@ -6,7 +6,7 @@
| Name | Summary |
|---|---|
-| [AndroidScope](-android-scope/index.md) | 异步协程作用域`open class AndroidScope : CoroutineScope` |
+| [AndroidScope](-android-scope/index.md) | 异步协程作用域`open class AndroidScope : CoroutineScope, `[`Closeable`](https://docs.oracle.com/javase/6/docs/api/java/io/Closeable.html) |
| [DialogCoroutineScope](-dialog-coroutine-scope/index.md) | 自动加载对话框网络请求`class DialogCoroutineScope : `[`NetCoroutineScope`](-net-coroutine-scope/index.md)`, LifecycleObserver` |
| [NetCoroutineScope](-net-coroutine-scope/index.md) | 自动显示网络错误信息协程作用域`open class NetCoroutineScope : `[`AndroidScope`](-android-scope/index.md) |
| [PageCoroutineScope](-page-coroutine-scope/index.md) | `class PageCoroutineScope : `[`NetCoroutineScope`](-net-coroutine-scope/index.md) |
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-conflict-rename/-init-.md b/docs/api/net/com.drake.net.tag/-label/-download-file-conflict-rename/-init-.md
new file mode 100644
index 000000000..6590db396
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-conflict-rename/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileConflictRename](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`DownloadFileConflictRename(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-conflict-rename/enabled.md b/docs/api/net/com.drake.net.tag/-label/-download-file-conflict-rename/enabled.md
new file mode 100644
index 000000000..e9a07ab81
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-conflict-rename/enabled.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileConflictRename](index.md) / [enabled](./enabled.md)
+
+# enabled
+
+`val enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-conflict-rename/index.md b/docs/api/net/com.drake.net.tag/-label/-download-file-conflict-rename/index.md
new file mode 100644
index 000000000..a804d367c
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-conflict-rename/index.md
@@ -0,0 +1,17 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileConflictRename](./index.md)
+
+# DownloadFileConflictRename
+
+`inline class DownloadFileConflictRename`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `DownloadFileConflictRename(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [enabled](enabled.md) | `val enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-dir/-init-.md b/docs/api/net/com.drake.net.tag/-label/-download-file-dir/-init-.md
new file mode 100644
index 000000000..b23d258c8
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-dir/-init-.md
@@ -0,0 +1,6 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileDir](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`DownloadFileDir(fileDir: `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?)`
+`DownloadFileDir(dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-dir/dir.md b/docs/api/net/com.drake.net.tag/-label/-download-file-dir/dir.md
new file mode 100644
index 000000000..06ebad0f7
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-dir/dir.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileDir](index.md) / [dir](./dir.md)
+
+# dir
+
+`val dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-dir/index.md b/docs/api/net/com.drake.net.tag/-label/-download-file-dir/index.md
new file mode 100644
index 000000000..c86ef338d
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-dir/index.md
@@ -0,0 +1,17 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileDir](./index.md)
+
+# DownloadFileDir
+
+`inline class DownloadFileDir`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `DownloadFileDir(fileDir: `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?)`
`DownloadFileDir(dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [dir](dir.md) | `val dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-m-d5-verify/-init-.md b/docs/api/net/com.drake.net.tag/-label/-download-file-m-d5-verify/-init-.md
new file mode 100644
index 000000000..803d8aa08
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-m-d5-verify/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileMD5Verify](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`DownloadFileMD5Verify(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-m-d5-verify/enabled.md b/docs/api/net/com.drake.net.tag/-label/-download-file-m-d5-verify/enabled.md
new file mode 100644
index 000000000..52f012589
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-m-d5-verify/enabled.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileMD5Verify](index.md) / [enabled](./enabled.md)
+
+# enabled
+
+`val enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-m-d5-verify/index.md b/docs/api/net/com.drake.net.tag/-label/-download-file-m-d5-verify/index.md
new file mode 100644
index 000000000..9468965ef
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-m-d5-verify/index.md
@@ -0,0 +1,17 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileMD5Verify](./index.md)
+
+# DownloadFileMD5Verify
+
+`inline class DownloadFileMD5Verify`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `DownloadFileMD5Verify(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [enabled](enabled.md) | `val enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-name-decode/-init-.md b/docs/api/net/com.drake.net.tag/-label/-download-file-name-decode/-init-.md
new file mode 100644
index 000000000..3bb944b2c
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-name-decode/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileNameDecode](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`DownloadFileNameDecode(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-name-decode/enabled.md b/docs/api/net/com.drake.net.tag/-label/-download-file-name-decode/enabled.md
new file mode 100644
index 000000000..3e486cf98
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-name-decode/enabled.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileNameDecode](index.md) / [enabled](./enabled.md)
+
+# enabled
+
+`val enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-name-decode/index.md b/docs/api/net/com.drake.net.tag/-label/-download-file-name-decode/index.md
new file mode 100644
index 000000000..135148805
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-name-decode/index.md
@@ -0,0 +1,17 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileNameDecode](./index.md)
+
+# DownloadFileNameDecode
+
+`inline class DownloadFileNameDecode`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `DownloadFileNameDecode(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [enabled](enabled.md) | `val enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-name/-init-.md b/docs/api/net/com.drake.net.tag/-label/-download-file-name/-init-.md
new file mode 100644
index 000000000..1b6f25cad
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-name/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileName](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`DownloadFileName(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-name/index.md b/docs/api/net/com.drake.net.tag/-label/-download-file-name/index.md
new file mode 100644
index 000000000..3e3d6135c
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-name/index.md
@@ -0,0 +1,17 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileName](./index.md)
+
+# DownloadFileName
+
+`inline class DownloadFileName`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `DownloadFileName(name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [name](name.md) | `val name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-file-name/name.md b/docs/api/net/com.drake.net.tag/-label/-download-file-name/name.md
new file mode 100644
index 000000000..3997a023f
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-file-name/name.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadFileName](index.md) / [name](./name.md)
+
+# name
+
+`val name: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-listeners/-init-.md b/docs/api/net/com.drake.net.tag/-label/-download-listeners/-init-.md
new file mode 100644
index 000000000..d1adf7e1b
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-listeners/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadListeners](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`DownloadListeners()`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-listeners/index.md b/docs/api/net/com.drake.net.tag/-label/-download-listeners/index.md
new file mode 100644
index 000000000..1989ef012
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-listeners/index.md
@@ -0,0 +1,11 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadListeners](./index.md)
+
+# DownloadListeners
+
+`class DownloadListeners : `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../../../com.drake.net.request/-progress-listener/index.md)`>`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `DownloadListeners()` |
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-temp-file/-init-.md b/docs/api/net/com.drake.net.tag/-label/-download-temp-file/-init-.md
new file mode 100644
index 000000000..7e65bee3b
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-temp-file/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadTempFile](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`DownloadTempFile(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-temp-file/enabled.md b/docs/api/net/com.drake.net.tag/-label/-download-temp-file/enabled.md
new file mode 100644
index 000000000..3750a6050
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-temp-file/enabled.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadTempFile](index.md) / [enabled](./enabled.md)
+
+# enabled
+
+`val enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-download-temp-file/index.md b/docs/api/net/com.drake.net.tag/-label/-download-temp-file/index.md
new file mode 100644
index 000000000..6177e5334
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-download-temp-file/index.md
@@ -0,0 +1,17 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [DownloadTempFile](./index.md)
+
+# DownloadTempFile
+
+`inline class DownloadTempFile`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `DownloadTempFile(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [enabled](enabled.md) | `val enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
diff --git a/docs/api/net/com.drake.net.tag/-label/-request-generic/-init-.md b/docs/api/net/com.drake.net.tag/-label/-request-generic/-init-.md
new file mode 100644
index 000000000..30e8bea4d
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-request-generic/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [RequestGeneric](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`RequestGeneric(type: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-request-generic/index.md b/docs/api/net/com.drake.net.tag/-label/-request-generic/index.md
new file mode 100644
index 000000000..a9377140b
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-request-generic/index.md
@@ -0,0 +1,17 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [RequestGeneric](./index.md)
+
+# RequestGeneric
+
+`inline class RequestGeneric`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `RequestGeneric(type: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)`)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [type](type.md) | `val type: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html) |
diff --git a/docs/api/net/com.drake.net.tag/-label/-request-generic/type.md b/docs/api/net/com.drake.net.tag/-label/-request-generic/type.md
new file mode 100644
index 000000000..5bcefd4d6
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-request-generic/type.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [RequestGeneric](index.md) / [type](./type.md)
+
+# type
+
+`val type: `[`Type`](https://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Type.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-request-group/-init-.md b/docs/api/net/com.drake.net.tag/-label/-request-group/-init-.md
new file mode 100644
index 000000000..d7a731bb8
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-request-group/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [RequestGroup](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`RequestGroup(value: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-request-group/index.md b/docs/api/net/com.drake.net.tag/-label/-request-group/index.md
new file mode 100644
index 000000000..f152c8328
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-request-group/index.md
@@ -0,0 +1,17 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [RequestGroup](./index.md)
+
+# RequestGroup
+
+`inline class RequestGroup`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `RequestGroup(value: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [value](value.md) | `val value: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?` |
diff --git a/docs/api/net/com.drake.net.tag/-label/-request-group/value.md b/docs/api/net/com.drake.net.tag/-label/-request-group/value.md
new file mode 100644
index 000000000..4a5775a71
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-request-group/value.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [RequestGroup](index.md) / [value](./value.md)
+
+# value
+
+`val value: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-request-id/-init-.md b/docs/api/net/com.drake.net.tag/-label/-request-id/-init-.md
new file mode 100644
index 000000000..78dcd0c69
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-request-id/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [RequestId](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`RequestId(value: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?)`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-request-id/index.md b/docs/api/net/com.drake.net.tag/-label/-request-id/index.md
new file mode 100644
index 000000000..f0a67c7e6
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-request-id/index.md
@@ -0,0 +1,17 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [RequestId](./index.md)
+
+# RequestId
+
+`inline class RequestId`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `RequestId(value: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [value](value.md) | `val value: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?` |
diff --git a/docs/api/net/com.drake.net.tag/-label/-request-id/value.md b/docs/api/net/com.drake.net.tag/-label/-request-id/value.md
new file mode 100644
index 000000000..bc56d8c88
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-request-id/value.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [RequestId](index.md) / [value](./value.md)
+
+# value
+
+`val value: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-tag-map/-init-.md b/docs/api/net/com.drake.net.tag/-label/-tag-map/-init-.md
new file mode 100644
index 000000000..1b694a85d
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-tag-map/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [TagMap](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`TagMap()`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-tag-map/index.md b/docs/api/net/com.drake.net.tag/-label/-tag-map/index.md
new file mode 100644
index 000000000..f39cdf9d3
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-tag-map/index.md
@@ -0,0 +1,11 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [TagMap](./index.md)
+
+# TagMap
+
+`class TagMap`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `TagMap()` |
diff --git a/docs/api/net/com.drake.net.tag/-label/-upload-listeners/-init-.md b/docs/api/net/com.drake.net.tag/-label/-upload-listeners/-init-.md
new file mode 100644
index 000000000..c7a11abab
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-upload-listeners/-init-.md
@@ -0,0 +1,5 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [UploadListeners](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`UploadListeners()`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-label/-upload-listeners/index.md b/docs/api/net/com.drake.net.tag/-label/-upload-listeners/index.md
new file mode 100644
index 000000000..7113935af
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/-upload-listeners/index.md
@@ -0,0 +1,11 @@
+[net](../../../index.md) / [com.drake.net.tag](../../index.md) / [Label](../index.md) / [UploadListeners](./index.md)
+
+# UploadListeners
+
+`class UploadListeners : `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../../../com.drake.net.request/-progress-listener/index.md)`>`
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | `UploadListeners()` |
diff --git a/docs/api/net/com.drake.net.tag/-label/index.md b/docs/api/net/com.drake.net.tag/-label/index.md
new file mode 100644
index 000000000..a5da50cbf
--- /dev/null
+++ b/docs/api/net/com.drake.net.tag/-label/index.md
@@ -0,0 +1,22 @@
+[net](../../index.md) / [com.drake.net.tag](../index.md) / [Label](./index.md)
+
+# Label
+
+`sealed class Label`
+
+### Types
+
+| Name | Summary |
+|---|---|
+| [DownloadFileConflictRename](-download-file-conflict-rename/index.md) | `class DownloadFileConflictRename` |
+| [DownloadFileDir](-download-file-dir/index.md) | `class DownloadFileDir` |
+| [DownloadFileMD5Verify](-download-file-m-d5-verify/index.md) | `class DownloadFileMD5Verify` |
+| [DownloadFileName](-download-file-name/index.md) | `class DownloadFileName` |
+| [DownloadFileNameDecode](-download-file-name-decode/index.md) | `class DownloadFileNameDecode` |
+| [DownloadListeners](-download-listeners/index.md) | `class DownloadListeners : `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`>` |
+| [DownloadTempFile](-download-temp-file/index.md) | `class DownloadTempFile` |
+| [RequestGeneric](-request-generic/index.md) | `class RequestGeneric` |
+| [RequestGroup](-request-group/index.md) | `class RequestGroup` |
+| [RequestId](-request-id/index.md) | `class RequestId` |
+| [TagMap](-tag-map/index.md) | `class TagMap` |
+| [UploadListeners](-upload-listeners/index.md) | `class UploadListeners : `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`<`[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`>` |
diff --git a/docs/api/net/com.drake.net.tag/-r-e-q-u-e-s-t.md b/docs/api/net/com.drake.net.tag/-r-e-q-u-e-s-t.md
deleted file mode 100644
index d3d013e4c..000000000
--- a/docs/api/net/com.drake.net.tag/-r-e-q-u-e-s-t.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../index.md) / [com.drake.net.tag](index.md) / [REQUEST](./-r-e-q-u-e-s-t.md)
-
-# REQUEST
-
-`object REQUEST : `[`TAG`](-t-a-g/index.md)
-
-请求参数打印标签
-
diff --git a/docs/api/net/com.drake.net.tag/-r-e-s-p-o-n-s-e.md b/docs/api/net/com.drake.net.tag/-r-e-s-p-o-n-s-e.md
deleted file mode 100644
index 6f80ed644..000000000
--- a/docs/api/net/com.drake.net.tag/-r-e-s-p-o-n-s-e.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../index.md) / [com.drake.net.tag](index.md) / [RESPONSE](./-r-e-s-p-o-n-s-e.md)
-
-# RESPONSE
-
-`object RESPONSE : `[`TAG`](-t-a-g/index.md)
-
-响应体打印标签
-
diff --git a/docs/api/net/com.drake.net.tag/-t-a-g/-init-.md b/docs/api/net/com.drake.net.tag/-t-a-g/-init-.md
deleted file mode 100644
index c56c04f67..000000000
--- a/docs/api/net/com.drake.net.tag/-t-a-g/-init-.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.tag](../index.md) / [TAG](index.md) / [<init>](./-init-.md)
-
-# <init>
-
-`TAG()`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-t-a-g/contains.md b/docs/api/net/com.drake.net.tag/-t-a-g/contains.md
deleted file mode 100644
index 2787c93d8..000000000
--- a/docs/api/net/com.drake.net.tag/-t-a-g/contains.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.tag](../index.md) / [TAG](index.md) / [contains](./contains.md)
-
-# contains
-
-`operator fun contains(tag: @UnsafeVariance `[`TAG`](index.md)`): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-t-a-g/get.md b/docs/api/net/com.drake.net.tag/-t-a-g/get.md
deleted file mode 100644
index 5dd9bcd91..000000000
--- a/docs/api/net/com.drake.net.tag/-t-a-g/get.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.tag](../index.md) / [TAG](index.md) / [get](./get.md)
-
-# get
-
-`operator fun get(key: `[`KClass`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html)`): `[`TAG`](index.md)`?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-t-a-g/index.md b/docs/api/net/com.drake.net.tag/-t-a-g/index.md
deleted file mode 100644
index 914bc1afd..000000000
--- a/docs/api/net/com.drake.net.tag/-t-a-g/index.md
+++ /dev/null
@@ -1,33 +0,0 @@
-[net](../../index.md) / [com.drake.net.tag](../index.md) / [TAG](./index.md)
-
-# TAG
-
-`abstract class TAG`
-
-### Constructors
-
-| Name | Summary |
-|---|---|
-| [<init>](-init-.md) | `TAG()` |
-
-### Properties
-
-| Name | Summary |
-|---|---|
-| [list](list.md) | `var list: `[`MutableList`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/index.html)`<`[`TAG`](./index.md)`>?` |
-
-### Functions
-
-| Name | Summary |
-|---|---|
-| [contains](contains.md) | `operator fun contains(tag: `[`TAG`](./index.md)`): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
-| [get](get.md) | `operator fun get(key: `[`KClass`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html)`): `[`TAG`](./index.md)`?` |
-| [minus](minus.md) | `operator fun minus(tag: `[`TAG`](./index.md)`): `[`TAG`](./index.md) |
-| [plus](plus.md) | `operator fun plus(tag: `[`TAG`](./index.md)`): `[`TAG`](./index.md) |
-
-### Inheritors
-
-| Name | Summary |
-|---|---|
-| [REQUEST](../-r-e-q-u-e-s-t.md) | 请求参数打印标签`object REQUEST : `[`TAG`](./index.md) |
-| [RESPONSE](../-r-e-s-p-o-n-s-e.md) | 响应体打印标签`object RESPONSE : `[`TAG`](./index.md) |
diff --git a/docs/api/net/com.drake.net.tag/-t-a-g/list.md b/docs/api/net/com.drake.net.tag/-t-a-g/list.md
deleted file mode 100644
index 391396daf..000000000
--- a/docs/api/net/com.drake.net.tag/-t-a-g/list.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.tag](../index.md) / [TAG](index.md) / [list](./list.md)
-
-# list
-
-`protected var list: `[`MutableList`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/index.html)`<`[`TAG`](index.md)`>?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-t-a-g/minus.md b/docs/api/net/com.drake.net.tag/-t-a-g/minus.md
deleted file mode 100644
index 40ceababf..000000000
--- a/docs/api/net/com.drake.net.tag/-t-a-g/minus.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.tag](../index.md) / [TAG](index.md) / [minus](./minus.md)
-
-# minus
-
-`operator fun minus(tag: `[`TAG`](index.md)`): `[`TAG`](index.md)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/-t-a-g/plus.md b/docs/api/net/com.drake.net.tag/-t-a-g/plus.md
deleted file mode 100644
index 946ff34f8..000000000
--- a/docs/api/net/com.drake.net.tag/-t-a-g/plus.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.tag](../index.md) / [TAG](index.md) / [plus](./plus.md)
-
-# plus
-
-`operator fun plus(tag: `[`TAG`](index.md)`): `[`TAG`](index.md)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.tag/index.md b/docs/api/net/com.drake.net.tag/index.md
index 469c7ecb8..3a3060182 100644
--- a/docs/api/net/com.drake.net.tag/index.md
+++ b/docs/api/net/com.drake.net.tag/index.md
@@ -6,6 +6,4 @@
| Name | Summary |
|---|---|
-| [REQUEST](-r-e-q-u-e-s-t.md) | 请求参数打印标签`object REQUEST : `[`TAG`](-t-a-g/index.md) |
-| [RESPONSE](-r-e-s-p-o-n-s-e.md) | 响应体打印标签`object RESPONSE : `[`TAG`](-t-a-g/index.md) |
-| [TAG](-t-a-g/index.md) | `abstract class TAG` |
+| [Label](-label/index.md) | `sealed class Label` |
diff --git a/docs/api/net/com.drake.net.time/-interval/-init-.md b/docs/api/net/com.drake.net.time/-interval/-init-.md
index edb4dba36..0671e9901 100644
--- a/docs/api/net/com.drake.net.time/-interval/-init-.md
+++ b/docs/api/net/com.drake.net.time/-interval/-init-.md
@@ -25,10 +25,10 @@
`end` - 结束值
-`period` - 事件间隔
+`period` - 计时器间隔
-`unit` - 事件单位
+`unit` - 计时器单位
-`initialDelay` - 第一次事件的间隔时间
+`initialDelay` - 第一次事件的间隔时间, 默认0
-`start` - 开始值, 当[start](start.md)]比[end](end.md)值大, 且end不等于-1时, 即为倒计时
\ No newline at end of file
+`start` - 开始值, 当[start](start.md)]比[end](end.md)值大, 且end不等于-1时, 即为倒计时, 反之正计时
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.time/-interval/finish.md b/docs/api/net/com.drake.net.time/-interval/finish.md
index 0b03a2417..89ea8a6c6 100644
--- a/docs/api/net/com.drake.net.time/-interval/finish.md
+++ b/docs/api/net/com.drake.net.time/-interval/finish.md
@@ -4,5 +4,5 @@
`fun finish(block: (`[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Interval`](index.md)
-轮循器完成
+轮循器完成时回调该函数
diff --git a/docs/api/net/com.drake.net.time/-interval/index.md b/docs/api/net/com.drake.net.time/-interval/index.md
index 7f49c6c17..9a2bd16da 100644
--- a/docs/api/net/com.drake.net.time/-interval/index.md
+++ b/docs/api/net/com.drake.net.time/-interval/index.md
@@ -25,13 +25,13 @@
`end` - 结束值
-`period` - 事件间隔
+`period` - 计时器间隔
-`unit` - 事件单位
+`unit` - 计时器单位
-`initialDelay` - 第一次事件的间隔时间
+`initialDelay` - 第一次事件的间隔时间, 默认0
-`start` - 开始值, 当[start](start.md)]比[end](end.md)值大, 且end不等于-1时, 即为倒计时
+`start` - 开始值, 当[start](start.md)]比[end](end.md)值大, 且end不等于-1时, 即为倒计时, 反之正计时
### Constructors
@@ -51,12 +51,12 @@
| Name | Summary |
|---|---|
-| [finish](finish.md) | 轮循器完成`fun finish(block: (`[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Interval`](./index.md) |
+| [finish](finish.md) | 轮循器完成时回调该函数`fun finish(block: (`[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Interval`](./index.md) |
| [life](life.md) | 绑定生命周期, 在指定生命周期发生时取消轮循器`fun life(lifecycleOwner: LifecycleOwner, lifeEvent: Event = Lifecycle.Event.ON_STOP): `[`Interval`](./index.md) |
| [pause](pause.md) | 暂停`fun pause(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
| [reset](reset.md) | 重置`fun reset(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
-| [resume](resume.md) | 继续`fun resume(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [resume](resume.md) | 继续 要求轮循器为暂停状态[IntervalStatus.STATE_PAUSE](../-interval-status/-s-t-a-t-e_-p-a-u-s-e.md), 否则无效`fun resume(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
| [start](start.md) | 开始`fun start(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
| [stop](stop.md) | 停止`fun stop(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
-| [subscribe](subscribe.md) | 订阅轮循器`fun subscribe(block: (`[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Interval`](./index.md) |
-| [switch](switch.md) | 开关`fun switch(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [subscribe](subscribe.md) | 订阅轮循器 每次轮循器计时都会调用该回调函数 轮循器完成时会同时触发回调[block](subscribe.md#com.drake.net.time.Interval$subscribe(kotlin.Function1((kotlin.Long, kotlin.Unit)))/block)和[finish](finish.md)`fun subscribe(block: (`[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Interval`](./index.md) |
+| [switch](switch.md) | 切换轮循器开始或结束`fun switch(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net.time/-interval/life.md b/docs/api/net/com.drake.net.time/-interval/life.md
index 6185f4c4e..57729f8b4 100644
--- a/docs/api/net/com.drake.net.time/-interval/life.md
+++ b/docs/api/net/com.drake.net.time/-interval/life.md
@@ -8,4 +8,13 @@
### Parameters
-`lifecycleOwner` - 默认在销毁时取消轮循器
\ No newline at end of file
+`lifecycleOwner` - 默认在销毁时取消轮循器
+
+`lifeEvent` -
+
+销毁的时机, 默认为 ON_STOP 界面停止时停止轮循器
+
+
+
+Fragment的显示/隐藏不会调用onDestroy, 故轮循器默认是在ON_STOP停止, 如果你设置ON_DESTORY请考虑Fragment的情况下
+
diff --git a/docs/api/net/com.drake.net.time/-interval/resume.md b/docs/api/net/com.drake.net.time/-interval/resume.md
index e520be810..124eec4a4 100644
--- a/docs/api/net/com.drake.net.time/-interval/resume.md
+++ b/docs/api/net/com.drake.net.time/-interval/resume.md
@@ -5,4 +5,5 @@
`fun resume(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
继续
+要求轮循器为暂停状态[IntervalStatus.STATE_PAUSE](../-interval-status/-s-t-a-t-e_-p-a-u-s-e.md), 否则无效
diff --git a/docs/api/net/com.drake.net.time/-interval/subscribe.md b/docs/api/net/com.drake.net.time/-interval/subscribe.md
index 6ea969dcc..2b71b5ef7 100644
--- a/docs/api/net/com.drake.net.time/-interval/subscribe.md
+++ b/docs/api/net/com.drake.net.time/-interval/subscribe.md
@@ -5,4 +5,6 @@
`fun subscribe(block: (`[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Interval`](index.md)
订阅轮循器
+每次轮循器计时都会调用该回调函数
+轮循器完成时会同时触发回调[block](subscribe.md#com.drake.net.time.Interval$subscribe(kotlin.Function1((kotlin.Long, kotlin.Unit)))/block)和[finish](finish.md)
diff --git a/docs/api/net/com.drake.net.time/-interval/switch.md b/docs/api/net/com.drake.net.time/-interval/switch.md
index 5f4c5b4b0..09963156d 100644
--- a/docs/api/net/com.drake.net.time/-interval/switch.md
+++ b/docs/api/net/com.drake.net.time/-interval/switch.md
@@ -4,5 +4,5 @@
`fun switch(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
-开关
+切换轮循器开始或结束
diff --git a/docs/api/net/com.drake.net.utils/-saved-view-model/-init-.md b/docs/api/net/com.drake.net.utils/-saved-view-model/-init-.md
deleted file mode 100644
index 21bfaa1ea..000000000
--- a/docs/api/net/com.drake.net.utils/-saved-view-model/-init-.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [SavedViewModel](index.md) / [<init>](./-init-.md)
-
-# <init>
-
-`SavedViewModel(saved: SavedStateHandle)`
-
-继承这个类可以快速创建具备saveInstance的ViewModel
-
diff --git a/docs/api/net/com.drake.net.utils/-saved-view-model/index.md b/docs/api/net/com.drake.net.utils/-saved-view-model/index.md
deleted file mode 100644
index 063a434cf..000000000
--- a/docs/api/net/com.drake.net.utils/-saved-view-model/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [SavedViewModel](./index.md)
-
-# SavedViewModel
-
-`open class SavedViewModel : ViewModel`
-
-继承这个类可以快速创建具备saveInstance的ViewModel
-
-### Constructors
-
-| Name | Summary |
-|---|---|
-| [<init>](-init-.md) | 继承这个类可以快速创建具备saveInstance的ViewModel`SavedViewModel(saved: SavedStateHandle)` |
-
-### Properties
-
-| Name | Summary |
-|---|---|
-| [saved](saved.md) | `var saved: SavedStateHandle` |
diff --git a/docs/api/net/com.drake.net.utils/-saved-view-model/saved.md b/docs/api/net/com.drake.net.utils/-saved-view-model/saved.md
deleted file mode 100644
index 3ce621a8c..000000000
--- a/docs/api/net/com.drake.net.utils/-saved-view-model/saved.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [SavedViewModel](index.md) / [saved](./saved.md)
-
-# saved
-
-`var saved: SavedStateHandle`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.utils/android.database.-cursor/foreach.md b/docs/api/net/com.drake.net.utils/android.database.-cursor/foreach.md
deleted file mode 100644
index 95b62c9af..000000000
--- a/docs/api/net/com.drake.net.utils/android.database.-cursor/foreach.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [android.database.Cursor](index.md) / [foreach](./foreach.md)
-
-# foreach
-
-`fun `[`Cursor`](https://developer.android.com/reference/android/database/Cursor.html)`.foreach(block: `[`Cursor`](https://developer.android.com/reference/android/database/Cursor.html)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
-
-方便迭代Cursor, 针对数据库的便携函数
-
diff --git a/docs/api/net/com.drake.net.utils/android.database.-cursor/index.md b/docs/api/net/com.drake.net.utils/android.database.-cursor/index.md
deleted file mode 100644
index b4841fb7d..000000000
--- a/docs/api/net/com.drake.net.utils/android.database.-cursor/index.md
+++ /dev/null
@@ -1,7 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [android.database.Cursor](./index.md)
-
-### Extensions for android.database.Cursor
-
-| Name | Summary |
-|---|---|
-| [foreach](foreach.md) | 方便迭代Cursor, 针对数据库的便携函数`fun `[`Cursor`](https://developer.android.com/reference/android/database/Cursor.html)`.foreach(block: `[`Cursor`](https://developer.android.com/reference/android/database/Cursor.html)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net.utils/android.widget.-edit-text/debounce.md b/docs/api/net/com.drake.net.utils/android.widget.-edit-text/debounce.md
new file mode 100644
index 000000000..9720e7477
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/android.widget.-edit-text/debounce.md
@@ -0,0 +1,11 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [android.widget.EditText](index.md) / [debounce](./debounce.md)
+
+# debounce
+
+`fun `[`EditText`](https://developer.android.com/reference/android/widget/EditText.html)`.debounce(timeoutMillis: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 800): Flow<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>`
+
+为EditText的输入框文本变化启用节流阀, 即超过指定时间后(默认800毫秒)的输入框文本变化事件[TextWatcher.onTextChanged](https://developer.android.com/reference/android/text/TextWatcher.html#onTextChanged(java.lang.CharSequence, int, int, int))会被下游收集到
+
+### Parameters
+
+`timeoutMillis` - 节流阀超时时间/单位毫秒, 默认值为800
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.utils/android.widget.-edit-text/index.md b/docs/api/net/com.drake.net.utils/android.widget.-edit-text/index.md
new file mode 100644
index 000000000..72958c2b1
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/android.widget.-edit-text/index.md
@@ -0,0 +1,7 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [android.widget.EditText](./index.md)
+
+### Extensions for android.widget.EditText
+
+| Name | Summary |
+|---|---|
+| [debounce](debounce.md) | 为EditText的输入框文本变化启用节流阀, 即超过指定时间后(默认800毫秒)的输入框文本变化事件[TextWatcher.onTextChanged](https://developer.android.com/reference/android/text/TextWatcher.html#onTextChanged(java.lang.CharSequence, int, int, int))会被下游收集到`fun `[`EditText`](https://developer.android.com/reference/android/widget/EditText.html)`.debounce(timeoutMillis: `[`Long`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` = 800): Flow<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>` |
diff --git a/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment-activity/get-saved-model.md b/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment-activity/get-saved-model.md
deleted file mode 100644
index 515274ce6..000000000
--- a/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment-activity/get-saved-model.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [androidx.fragment.app.FragmentActivity](index.md) / [getSavedModel](./get-saved-model.md)
-
-# getSavedModel
-
-`fun FragmentActivity.getSavedModel(): M`
-
-返回当前组件指定的SavedViewModel
-
diff --git a/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment-activity/index.md b/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment-activity/index.md
index 58345ef6b..b67f03e8c 100644
--- a/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment-activity/index.md
+++ b/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment-activity/index.md
@@ -4,5 +4,4 @@
| Name | Summary |
|---|---|
-| [getSavedModel](get-saved-model.md) | 返回当前组件指定的SavedViewModel`fun FragmentActivity.getSavedModel(): M` |
| [scopeDialog](scope-dialog.md) | 作用域开始时自动显示加载对话框, 结束时自动关闭加载对话框 可以设置全局对话框 [com.drake.net.NetConfig.onDialog](../../com.drake.net/-net-config/on-dialog.md)`fun FragmentActivity.scopeDialog(dialog: `[`Dialog`](https://developer.android.com/reference/android/app/Dialog.html)`? = null, cancelable: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../../com.drake.net.scope/-net-coroutine-scope/index.md) |
diff --git a/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/get-saved-model.md b/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/get-saved-model.md
deleted file mode 100644
index 5398a78ba..000000000
--- a/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/get-saved-model.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [androidx.fragment.app.Fragment](index.md) / [getSavedModel](./get-saved-model.md)
-
-# getSavedModel
-
-`fun Fragment.getSavedModel(): M`
-
-返回当前组件指定的SavedViewModel
-
diff --git a/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/index.md b/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/index.md
index c2c9afb11..fd3baf5d3 100644
--- a/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/index.md
+++ b/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/index.md
@@ -4,7 +4,6 @@
| Name | Summary |
|---|---|
-| [getSavedModel](get-saved-model.md) | 返回当前组件指定的SavedViewModel`fun Fragment.getSavedModel(): M` |
| [scopeDialog](scope-dialog.md) | `fun Fragment.scopeDialog(dialog: `[`Dialog`](https://developer.android.com/reference/android/app/Dialog.html)`? = null, cancelable: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../../com.drake.net.scope/-net-coroutine-scope/index.md) |
| [scopeLife](scope-life.md) | `fun Fragment.scopeLife(lifeEvent: Event = Lifecycle.Event.ON_STOP, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md) |
-| [scopeNetLife](scope-net-life.md) | Fragment应当在[Lifecycle.Event.ON_STOP](#)时就取消作用域, 避免[Fragment.onDestroyView](#)导致引用空视图`fun Fragment.scopeNetLife(lifeEvent: Event = Lifecycle.Event.ON_STOP, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../../com.drake.net.scope/-net-coroutine-scope/index.md) |
+| [scopeNetLife](scope-net-life.md) | 和上述函数功能相同, 只是接受者为Fragment`fun Fragment.scopeNetLife(lifeEvent: Event = Lifecycle.Event.ON_STOP, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../../com.drake.net.scope/-net-coroutine-scope/index.md) |
diff --git a/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/scope-net-life.md b/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/scope-net-life.md
index e753608d8..7cd4e1c9c 100644
--- a/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/scope-net-life.md
+++ b/docs/api/net/com.drake.net.utils/androidx.fragment.app.-fragment/scope-net-life.md
@@ -4,5 +4,7 @@
`fun Fragment.scopeNetLife(lifeEvent: Event = Lifecycle.Event.ON_STOP, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../../com.drake.net.scope/-net-coroutine-scope/index.md)
+和上述函数功能相同, 只是接受者为Fragment
+
Fragment应当在[Lifecycle.Event.ON_STOP](#)时就取消作用域, 避免[Fragment.onDestroyView](#)导致引用空视图
diff --git a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/index.md b/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/index.md
deleted file mode 100644
index c816124fd..000000000
--- a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [androidx.lifecycle.LifecycleOwner](./index.md)
-
-### Extensions for androidx.lifecycle.LifecycleOwner
-
-| Name | Summary |
-|---|---|
-| [observe](observe.md) | 快速创建LiveData的观察者`fun LifecycleOwner.observe(liveData: LiveData?, block: M?.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
-| [scopeLife](scope-life.md) | `fun LifecycleOwner.scopeLife(lifeEvent: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md) |
-| [scopeNetLife](scope-net-life.md) | `fun LifecycleOwner.scopeNetLife(lifeEvent: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../../com.drake.net.scope/-net-coroutine-scope/index.md) |
diff --git a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/observe.md b/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/observe.md
deleted file mode 100644
index 904c58bc8..000000000
--- a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/observe.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [androidx.lifecycle.LifecycleOwner](index.md) / [observe](./observe.md)
-
-# observe
-
-`fun LifecycleOwner.observe(liveData: LiveData?, block: M?.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
-
-快速创建LiveData的观察者
-
diff --git a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/scope-net-life.md b/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/scope-net-life.md
deleted file mode 100644
index 902878edf..000000000
--- a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/scope-net-life.md
+++ /dev/null
@@ -1,5 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [androidx.lifecycle.LifecycleOwner](index.md) / [scopeNetLife](./scope-net-life.md)
-
-# scopeNetLife
-
-`fun LifecycleOwner.scopeNetLife(lifeEvent: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../../com.drake.net.scope/-net-coroutine-scope/index.md)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-view-model-store-owner/get-view-model.md b/docs/api/net/com.drake.net.utils/androidx.lifecycle.-view-model-store-owner/get-view-model.md
deleted file mode 100644
index 0e2d83649..000000000
--- a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-view-model-store-owner/get-view-model.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [androidx.lifecycle.ViewModelStoreOwner](index.md) / [getViewModel](./get-view-model.md)
-
-# getViewModel
-
-`fun ViewModelStoreOwner.getViewModel(): M`
-
-返回当前组件指定的ViewModel
-
diff --git a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-view-model-store-owner/index.md b/docs/api/net/com.drake.net.utils/androidx.lifecycle.-view-model-store-owner/index.md
deleted file mode 100644
index 59e78da64..000000000
--- a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-view-model-store-owner/index.md
+++ /dev/null
@@ -1,7 +0,0 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [androidx.lifecycle.ViewModelStoreOwner](./index.md)
-
-### Extensions for androidx.lifecycle.ViewModelStoreOwner
-
-| Name | Summary |
-|---|---|
-| [getViewModel](get-view-model.md) | 返回当前组件指定的ViewModel`fun ViewModelStoreOwner.getViewModel(): M` |
diff --git a/docs/api/net/com.drake.net.utils/index.md b/docs/api/net/com.drake.net.utils/index.md
index dd061a4d1..7e0e7c74c 100644
--- a/docs/api/net/com.drake.net.utils/index.md
+++ b/docs/api/net/com.drake.net.utils/index.md
@@ -2,33 +2,32 @@
## Package com.drake.net.utils
-### Types
-
-| Name | Summary |
-|---|---|
-| [SavedViewModel](-saved-view-model/index.md) | 继承这个类可以快速创建具备saveInstance的ViewModel`open class SavedViewModel : ViewModel` |
-
### Extensions for External Classes
| Name | Summary |
|---|---|
-| [android.database.Cursor](android.database.-cursor/index.md) | |
+| [android.widget.EditText](android.widget.-edit-text/index.md) | |
| [androidx.fragment.app.Fragment](androidx.fragment.app.-fragment/index.md) | |
| [androidx.fragment.app.FragmentActivity](androidx.fragment.app.-fragment-activity/index.md) | |
-| [androidx.lifecycle.LifecycleOwner](androidx.lifecycle.-lifecycle-owner/index.md) | |
-| [androidx.lifecycle.ViewModelStoreOwner](androidx.lifecycle.-view-model-store-owner/index.md) | |
| [com.drake.brv.PageRefreshLayout](com.drake.brv.-page-refresh-layout/index.md) | |
| [com.drake.statelayout.StateLayout](com.drake.statelayout.-state-layout/index.md) | |
+| [java.io.File](java.io.-file/index.md) | |
+| [kotlin.String](kotlin.-string/index.md) | |
| [kotlinx.coroutines.CoroutineScope](kotlinx.coroutines.-coroutine-scope/index.md) | |
| [kotlinx.coroutines.flow.Flow](kotlinx.coroutines.flow.-flow/index.md) | |
+| [okhttp3.OkHttpClient](okhttp3.-ok-http-client/index.md) | |
+| [okhttp3.OkHttpClient.Builder](okhttp3.-ok-http-client.-builder/index.md) | |
### Functions
| Name | Summary |
|---|---|
+| [lazyField](lazy-field.md) | 延迟初始化 线程安全 等效于[lazy](#), 但是可以获取委托字段属性`fun T.lazyField(block: T.(`[`KProperty`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-property/index.html)`<*>) -> V): `[`ReadWriteProperty`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.properties/-read-write-property/index.html)`` |
| [runMain](run-main.md) | 在主线程运行`fun runMain(block: () -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
| [scope](scope.md) | 异步作用域`fun scope(dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../com.drake.net.scope/-android-scope/index.md) |
-| [scopeNet](scope-net.md) | 网络请求的异步作用域 自动显示错误信息吐司`fun scopeNet(dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../com.drake.net.scope/-net-coroutine-scope/index.md) |
+| [scopeLife](scope-life.md) | `fun LifecycleOwner.scopeLife(lifeEvent: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../com.drake.net.scope/-android-scope/index.md) |
+| [scopeNet](scope-net.md) | 该函数比[scope](kotlinx.coroutines.flow.-flow/scope.md)多了以下功能`fun scopeNet(dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../com.drake.net.scope/-net-coroutine-scope/index.md) |
+| [scopeNetLife](scope-net-life.md) | 该函数比scopeNet多了自动取消作用域功能`fun LifecycleOwner.scopeNetLife(lifeEvent: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../com.drake.net.scope/-net-coroutine-scope/index.md) |
| [withDefault](with-default.md) | 切换到默认调度器`suspend fun withDefault(block: suspend CoroutineScope.() -> T): T` |
| [withIO](with-i-o.md) | 切换到IO程调度器`suspend fun withIO(block: suspend CoroutineScope.() -> T): T` |
| [withMain](with-main.md) | 切换到主线程调度器`suspend fun withMain(block: suspend CoroutineScope.() -> T): T` |
diff --git a/docs/api/net/com.drake.net.utils/java.io.-file/index.md b/docs/api/net/com.drake.net.utils/java.io.-file/index.md
new file mode 100644
index 000000000..82a481c57
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/java.io.-file/index.md
@@ -0,0 +1,7 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [java.io.File](./index.md)
+
+### Extensions for java.io.File
+
+| Name | Summary |
+|---|---|
+| [md5](md5.md) | 返回文件的MD5值`fun `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?.md5(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
diff --git a/docs/api/net/com.drake.net.utils/java.io.-file/md5.md b/docs/api/net/com.drake.net.utils/java.io.-file/md5.md
new file mode 100644
index 000000000..7e1317740
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/java.io.-file/md5.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [java.io.File](index.md) / [md5](./md5.md)
+
+# md5
+
+`fun `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`?.md5(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?`
+
+返回文件的MD5值
+
diff --git a/docs/api/net/com.drake.net.utils/kotlin.-string/index.md b/docs/api/net/com.drake.net.utils/kotlin.-string/index.md
new file mode 100644
index 000000000..8e4b1dc87
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/kotlin.-string/index.md
@@ -0,0 +1,7 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [kotlin.String](./index.md)
+
+### Extensions for kotlin.String
+
+| Name | Summary |
+|---|---|
+| [isValid](is-valid.md) | `fun `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?.isValid(block: (`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
`val `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?.isValid: ` |
diff --git a/docs/api/net/com.drake.net.utils/kotlin.-string/is-valid.md b/docs/api/net/com.drake.net.utils/kotlin.-string/is-valid.md
new file mode 100644
index 000000000..c8776e032
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/kotlin.-string/is-valid.md
@@ -0,0 +1,6 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [kotlin.String](index.md) / [isValid](./is-valid.md)
+
+# isValid
+
+`inline fun `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?.isValid(block: (`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+`inline val `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?.isValid: `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/fastest.md b/docs/api/net/com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/fastest.md
index 7ce44ca31..8dd035757 100644
--- a/docs/api/net/com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/fastest.md
+++ b/docs/api/net/com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/fastest.md
@@ -2,35 +2,25 @@
# fastest
-`suspend fun CoroutineScope.fastest(vararg deferredArray: Deferred): T`
-`suspend fun CoroutineScope.fastest(deferredArray: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`>): T`
+`suspend fun CoroutineScope.fastest(listDeferred: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`>, group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null): T`
-该函数将选择[deferredArray](fastest.md#com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.Array((kotlinx.coroutines.Deferred((com.drake.net.utils.fastest.T)))))/deferredArray)中的Deferred执行[Deferred.await](#), 然后将返回最快的结果
+该函数将选择[listDeferred](fastest.md#com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.collections.List((kotlinx.coroutines.Deferred((com.drake.net.utils.fastest.T)))), kotlin.Any)/listDeferred)中的Deferred执行[Deferred.await](#), 然后将返回最快的结果
执行过程中的异常将被忽略, 如果全部抛出异常则将抛出最后一个Deferred的异常
### Parameters
-`deferredArray` - 一系列并发任务`suspend fun CoroutineScope.fastest(vararg deferredArray: `[`DeferredTransform`](../../com.drake.net.transform/-deferred-transform/index.md)`): R`
+`group` - 指定该值将在成功返回结果后取消掉对应uid的网络请求
-该函数将选择[deferredArray](fastest.md#com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.Array((com.drake.net.transform.DeferredTransform((com.drake.net.utils.fastest.T, com.drake.net.utils.fastest.R)))))/deferredArray)中的Deferred执行[Deferred.await](#), 然后将返回最快的结果
-执行过程中的异常将被忽略, 如果全部抛出异常则将抛出最后一个Deferred的异常
-
-### Parameters
-
-`deferredArray` - 一系列并发任务
-
-**See Also**
-
-[DeferredTransform](../../com.drake.net.transform/-deferred-transform/index.md)
+`listDeferred` - 一系列并发任务`@JvmName("fastestTransform") suspend fun CoroutineScope.fastest(listDeferred: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`DeferredTransform`](../../com.drake.net.transform/-deferred-transform/index.md)`>?, group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null): R`
-`@JvmName("fastestTransform") suspend fun CoroutineScope.fastest(deferredList: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`DeferredTransform`](../../com.drake.net.transform/-deferred-transform/index.md)`>): R`
-
-该函数将选择[deferredList](fastest.md#com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.collections.List((com.drake.net.transform.DeferredTransform((com.drake.net.utils.fastest.T, com.drake.net.utils.fastest.R)))))/deferredList)中的Deferred执行[Deferred.await](#), 然后将返回最快的结果
+该函数将选择[listDeferred](fastest.md#com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.collections.List((com.drake.net.transform.DeferredTransform((com.drake.net.utils.fastest.T, com.drake.net.utils.fastest.R)))), kotlin.Any)/listDeferred)中的Deferred执行[Deferred.await](#), 然后将返回最快的结果
执行过程中的异常将被忽略, 如果全部抛出异常则将抛出最后一个Deferred的异常
### Parameters
-`deferredList` - 一系列并发任务
+`group` - 指定该值将在成功返回结果后取消掉对应uid的网络请求
+
+`listDeferred` - 一系列并发任务
**See Also**
diff --git a/docs/api/net/com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/index.md b/docs/api/net/com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/index.md
index 89b52a83a..14a687a08 100644
--- a/docs/api/net/com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/index.md
+++ b/docs/api/net/com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/index.md
@@ -4,4 +4,4 @@
| Name | Summary |
|---|---|
-| [fastest](fastest.md) | 该函数将选择[deferredArray](fastest.md#com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.Array((kotlinx.coroutines.Deferred((com.drake.net.utils.fastest.T)))))/deferredArray)中的Deferred执行[Deferred.await](#), 然后将返回最快的结果 执行过程中的异常将被忽略, 如果全部抛出异常则将抛出最后一个Deferred的异常`suspend fun CoroutineScope.fastest(vararg deferredArray: Deferred): T`
`suspend fun CoroutineScope.fastest(deferredArray: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`>): T`
`suspend fun CoroutineScope.fastest(vararg deferredArray: `[`DeferredTransform`](../../com.drake.net.transform/-deferred-transform/index.md)`): R`
该函数将选择[deferredList](fastest.md#com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.collections.List((com.drake.net.transform.DeferredTransform((com.drake.net.utils.fastest.T, com.drake.net.utils.fastest.R)))))/deferredList)中的Deferred执行[Deferred.await](#), 然后将返回最快的结果 执行过程中的异常将被忽略, 如果全部抛出异常则将抛出最后一个Deferred的异常`suspend fun CoroutineScope.fastest(deferredList: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`DeferredTransform`](../../com.drake.net.transform/-deferred-transform/index.md)`>): R` |
+| [fastest](fastest.md) | 该函数将选择[listDeferred](fastest.md#com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.collections.List((kotlinx.coroutines.Deferred((com.drake.net.utils.fastest.T)))), kotlin.Any)/listDeferred)中的Deferred执行[Deferred.await](#), 然后将返回最快的结果 执行过程中的异常将被忽略, 如果全部抛出异常则将抛出最后一个Deferred的异常`suspend fun CoroutineScope.fastest(listDeferred: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`>, group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null): T`
`suspend fun CoroutineScope.fastest(listDeferred: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`DeferredTransform`](../../com.drake.net.transform/-deferred-transform/index.md)`>?, group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null): R` |
diff --git a/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/index.md b/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/index.md
index 1ee97cc4a..37309c4f7 100644
--- a/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/index.md
+++ b/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/index.md
@@ -4,5 +4,5 @@
| Name | Summary |
|---|---|
-| [listen](listen.md) | 收集Flow结果并过滤重复结果`fun Flow<`[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`>.listen(lifecycleOwner: LifecycleOwner? = null, lifeEvent: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: (`[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md) |
-| [scope](scope.md) | Flow直接创建作用域`fun Flow.scope(owner: LifecycleOwner? = null, event: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, action: suspend (value: T) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md) |
+| [listen](listen.md) | 收集Flow结果并过滤重复结果`fun Flow.listen(owner: LifecycleOwner? = null, event: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, action: suspend CoroutineScope.(value: T) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md) |
+| [scope](scope.md) | Flow直接创建作用域`fun Flow.scope(owner: LifecycleOwner? = null, event: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, action: suspend CoroutineScope.(value: T) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md) |
diff --git a/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/listen.md b/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/listen.md
index c7880f054..05fd35db1 100644
--- a/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/listen.md
+++ b/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/listen.md
@@ -2,7 +2,7 @@
# listen
-`fun Flow<`[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`>.listen(lifecycleOwner: LifecycleOwner? = null, lifeEvent: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: (`[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md)
+`inline fun Flow.listen(owner: LifecycleOwner? = null, event: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, crossinline action: suspend CoroutineScope.(value: T) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md)
收集Flow结果并过滤重复结果
diff --git a/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/scope.md b/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/scope.md
index ecdb9dd21..1444e140d 100644
--- a/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/scope.md
+++ b/docs/api/net/com.drake.net.utils/kotlinx.coroutines.flow.-flow/scope.md
@@ -2,7 +2,7 @@
# scope
-`inline fun Flow.scope(owner: LifecycleOwner? = null, event: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, crossinline action: suspend (value: T) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md)
+`inline fun Flow.scope(owner: LifecycleOwner? = null, event: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, crossinline action: suspend CoroutineScope.(value: T) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md)
Flow直接创建作用域
diff --git a/docs/api/net/com.drake.net.utils/lazy-field.md b/docs/api/net/com.drake.net.utils/lazy-field.md
new file mode 100644
index 000000000..2808dd20b
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/lazy-field.md
@@ -0,0 +1,10 @@
+[net](../index.md) / [com.drake.net.utils](index.md) / [lazyField](./lazy-field.md)
+
+# lazyField
+
+`fun T.lazyField(block: T.(`[`KProperty`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-property/index.html)`<*>) -> V): `[`ReadWriteProperty`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.properties/-read-write-property/index.html)``
+
+延迟初始化
+线程安全
+等效于[lazy](#), 但是可以获取委托字段属性
+
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/index.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/index.md
new file mode 100644
index 000000000..9dd4c6c84
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/index.md
@@ -0,0 +1,13 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient.Builder](./index.md)
+
+### Extensions for okhttp3.OkHttpClient.Builder
+
+| Name | Summary |
+|---|---|
+| [onDialog](on-dialog.md) | 全局加载对话框设置 设置在使用scopeDialog自动弹出的加载对话框`fun Builder.onDialog(block: `[`DialogCoroutineScope`](../../com.drake.net.scope/-dialog-coroutine-scope/index.md)`.(FragmentActivity) -> `[`Dialog`](https://developer.android.com/reference/android/app/Dialog.html)`): ` |
+| [onError](on-error.md) | 全局网络请求错误捕获`fun Builder.onError(block: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): ` |
+| [onStateError](on-state-error.md) | 全局缺省页错误捕获`fun Builder.onStateError(block: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`.(view: `[`View`](https://developer.android.com/reference/android/view/View.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): ` |
+| [setConverter](set-converter.md) | 转换器`fun Builder.setConverter(converter: `[`NetConverter`](../../com.drake.net.convert/-net-converter/index.md)`): ` |
+| [setHost](set-host.md) | 设置全局默认的Host, 在使用[com.drake.net.request.BaseRequest.setPath](../../com.drake.net.request/-base-request/set-path.md)的时候会成为默认的Host`fun Builder.setHost(host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): ` |
+| [setLog](set-log.md) | 开启日志`fun Builder.setLog(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): ` |
+| [setRequestInterceptor](set-request-interceptor.md) | 添加轻量级的请求拦截器, 可以在每次请求之前修改参数或者客户端配置 该拦截器不同于OkHttp的Interceptor无需处理请求动作`fun Builder.setRequestInterceptor(interceptor: `[`RequestInterceptor`](../../com.drake.net.interceptor/-request-interceptor/index.md)`): ` |
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-dialog.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-dialog.md
new file mode 100644
index 000000000..a027fd043
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-dialog.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient.Builder](index.md) / [onDialog](./on-dialog.md)
+
+# onDialog
+
+`fun Builder.onDialog(block: `[`DialogCoroutineScope`](../../com.drake.net.scope/-dialog-coroutine-scope/index.md)`.(FragmentActivity) -> `[`Dialog`](https://developer.android.com/reference/android/app/Dialog.html)`): `
+
+全局加载对话框设置
+设置在使用scopeDialog自动弹出的加载对话框
+
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-error.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-error.md
new file mode 100644
index 000000000..9879aa106
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-error.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient.Builder](index.md) / [onError](./on-error.md)
+
+# onError
+
+`fun Builder.onError(block: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `
+
+全局网络请求错误捕获
+
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-state-error.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-state-error.md
new file mode 100644
index 000000000..d4d709c05
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-state-error.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient.Builder](index.md) / [onStateError](./on-state-error.md)
+
+# onStateError
+
+`fun Builder.onStateError(block: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`.(view: `[`View`](https://developer.android.com/reference/android/view/View.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `
+
+全局缺省页错误捕获
+
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-converter.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-converter.md
new file mode 100644
index 000000000..210bdb83e
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-converter.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient.Builder](index.md) / [setConverter](./set-converter.md)
+
+# setConverter
+
+`fun Builder.setConverter(converter: `[`NetConverter`](../../com.drake.net.convert/-net-converter/index.md)`): `
+
+转换器
+
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-host.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-host.md
new file mode 100644
index 000000000..934b54f94
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-host.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient.Builder](index.md) / [setHost](./set-host.md)
+
+# setHost
+
+`fun Builder.setHost(host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `
+
+设置全局默认的Host, 在使用[com.drake.net.request.BaseRequest.setPath](../../com.drake.net.request/-base-request/set-path.md)的时候会成为默认的Host
+
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-log.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-log.md
new file mode 100644
index 000000000..dfb11e2c3
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-log.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient.Builder](index.md) / [setLog](./set-log.md)
+
+# setLog
+
+`fun Builder.setLog(enabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `
+
+开启日志
+
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-request-interceptor.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-request-interceptor.md
new file mode 100644
index 000000000..ad57c2ae4
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-request-interceptor.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient.Builder](index.md) / [setRequestInterceptor](./set-request-interceptor.md)
+
+# setRequestInterceptor
+
+`fun Builder.setRequestInterceptor(interceptor: `[`RequestInterceptor`](../../com.drake.net.interceptor/-request-interceptor/index.md)`): `
+
+添加轻量级的请求拦截器, 可以在每次请求之前修改参数或者客户端配置
+该拦截器不同于OkHttp的Interceptor无需处理请求动作
+
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client/cancel-group.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client/cancel-group.md
new file mode 100644
index 000000000..498ad5299
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client/cancel-group.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient](index.md) / [cancelGroup](./cancel-group.md)
+
+# cancelGroup
+
+`fun OkHttpClient.cancelGroup(group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+取消OkHttp客户端中指定Group的请求
+如果使用的是Net创建的网络请求请使用[com.drake.net.Net.cancelGroup](../../com.drake.net/-net/cancel-group.md)
+
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client/cancel-id.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client/cancel-id.md
new file mode 100644
index 000000000..a32e7aea4
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client/cancel-id.md
@@ -0,0 +1,9 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient](index.md) / [cancelId](./cancel-id.md)
+
+# cancelId
+
+`fun OkHttpClient.cancelId(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+取消OkHttp客户端中指定Id的请求
+如果使用的是Net创建的网络请求请使用[com.drake.net.Net.cancelId](../../com.drake.net/-net/cancel-id.md)
+
diff --git a/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client/index.md b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client/index.md
new file mode 100644
index 000000000..cc6c84817
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/okhttp3.-ok-http-client/index.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net.utils](../index.md) / [okhttp3.OkHttpClient](./index.md)
+
+### Extensions for okhttp3.OkHttpClient
+
+| Name | Summary |
+|---|---|
+| [cancelGroup](cancel-group.md) | 取消OkHttp客户端中指定Group的请求 如果使用的是Net创建的网络请求请使用[com.drake.net.Net.cancelGroup](../../com.drake.net/-net/cancel-group.md)`fun OkHttpClient.cancelGroup(group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [cancelId](cancel-id.md) | 取消OkHttp客户端中指定Id的请求 如果使用的是Net创建的网络请求请使用[com.drake.net.Net.cancelId](../../com.drake.net/-net/cancel-id.md)`fun OkHttpClient.cancelId(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/scope-life.md b/docs/api/net/com.drake.net.utils/scope-life.md
similarity index 57%
rename from docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/scope-life.md
rename to docs/api/net/com.drake.net.utils/scope-life.md
index 3926c7b04..b4a1f99dd 100644
--- a/docs/api/net/com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/scope-life.md
+++ b/docs/api/net/com.drake.net.utils/scope-life.md
@@ -1,5 +1,5 @@
-[net](../../index.md) / [com.drake.net.utils](../index.md) / [androidx.lifecycle.LifecycleOwner](index.md) / [scopeLife](./scope-life.md)
+[net](../index.md) / [com.drake.net.utils](index.md) / [scopeLife](./scope-life.md)
# scopeLife
-`fun LifecycleOwner.scopeLife(lifeEvent: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../../com.drake.net.scope/-android-scope/index.md)
\ No newline at end of file
+`fun LifecycleOwner.scopeLife(lifeEvent: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`AndroidScope`](../com.drake.net.scope/-android-scope/index.md)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net.utils/scope-net-life.md b/docs/api/net/com.drake.net.utils/scope-net-life.md
new file mode 100644
index 000000000..c52cfc1c7
--- /dev/null
+++ b/docs/api/net/com.drake.net.utils/scope-net-life.md
@@ -0,0 +1,19 @@
+[net](../index.md) / [com.drake.net.utils](index.md) / [scopeNetLife](./scope-net-life.md)
+
+# scopeNetLife
+
+`fun LifecycleOwner.scopeNetLife(lifeEvent: Event = Lifecycle.Event.ON_DESTROY, dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../com.drake.net.scope/-net-coroutine-scope/index.md)
+
+该函数比scopeNet多了自动取消作用域功能
+
+该作用域生命周期跟随LifecycleOwner. 比如传入Activity会默认在[FragmentActivity.onDestroy](#)时取消网络请求.
+
+### Parameters
+
+`lifeEvent` - 指定LifecycleOwner处于生命周期下取消网络请求/作用域
+
+`dispatcher` - 调度器, 默认运行在[Dispatchers.Main](#)即主线程下
+
+**Receiver**
+可传入FragmentActivity/AppCompatActivity, 或者其他的实现了LifecycleOwner的类
+
diff --git a/docs/api/net/com.drake.net.utils/scope-net.md b/docs/api/net/com.drake.net.utils/scope-net.md
index d3b885107..4395f8053 100644
--- a/docs/api/net/com.drake.net.utils/scope-net.md
+++ b/docs/api/net/com.drake.net.utils/scope-net.md
@@ -4,8 +4,10 @@
`fun scopeNet(dispatcher: CoroutineDispatcher = Dispatchers.Main, block: suspend CoroutineScope.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`NetCoroutineScope`](../com.drake.net.scope/-net-coroutine-scope/index.md)
-网络请求的异步作用域
-自动显示错误信息吐司
+该函数比[scope](kotlinx.coroutines.flow.-flow/scope.md)多了以下功能
+
+* 在作用域内抛出异常时会被回调的[NetConfig.onError](#)函数中
+* 自动显示错误信息吐司, 可以通过指定[NetConfig.onError](#)来取消或者增加自己的处理
该作用域生命周期跟随整个应用, 注意内存泄漏
diff --git a/docs/api/net/com.drake.net/-net-config/app.md b/docs/api/net/com.drake.net/-net-config/app.md
index 568a699f5..423ba5e37 100644
--- a/docs/api/net/com.drake.net/-net-config/app.md
+++ b/docs/api/net/com.drake.net/-net-config/app.md
@@ -4,8 +4,8 @@
`lateinit var app: `[`Application`](https://developer.android.com/reference/android/app/Application.html)
-全局上下文, 一般执行[initNet](../android.app.-application/init-net.md)即可, 无需手动赋值
+全局上下文, 一般执行[initNet](../init-net.md)即可, 无需手动赋值
### Property
-`app` - 全局上下文, 一般执行[initNet](../android.app.-application/init-net.md)即可, 无需手动赋值
\ No newline at end of file
+`app` - 全局上下文, 一般执行[initNet](../init-net.md)即可, 无需手动赋值
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net-config/converter.md b/docs/api/net/com.drake.net/-net-config/converter.md
new file mode 100644
index 000000000..e12e634e6
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net-config/converter.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [NetConfig](index.md) / [converter](./converter.md)
+
+# converter
+
+`var converter: `[`NetConverter`](../../com.drake.net.convert/-net-converter/index.md)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net-config/host.md b/docs/api/net/com.drake.net/-net-config/host.md
index c89d27dae..ce6cd9077 100644
--- a/docs/api/net/com.drake.net/-net-config/host.md
+++ b/docs/api/net/com.drake.net/-net-config/host.md
@@ -2,7 +2,7 @@
# host
-`lateinit var host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
+`var host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
全局的域名或者ip(baseUrl)
diff --git a/docs/api/net/com.drake.net/-net-config/index.md b/docs/api/net/com.drake.net/-net-config/index.md
index 156494940..94aec156a 100644
--- a/docs/api/net/com.drake.net/-net-config/index.md
+++ b/docs/api/net/com.drake.net/-net-config/index.md
@@ -10,8 +10,13 @@ Net的全局配置
| Name | Summary |
|---|---|
-| [app](app.md) | 全局上下文, 一般执行[initNet](../android.app.-application/init-net.md)即可, 无需手动赋值`lateinit var app: `[`Application`](https://developer.android.com/reference/android/app/Application.html) |
-| [host](host.md) | 全局的域名或者ip(baseUrl)`lateinit var host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [app](app.md) | 全局上下文, 一般执行[initNet](../init-net.md)即可, 无需手动赋值`lateinit var app: `[`Application`](https://developer.android.com/reference/android/app/Application.html) |
+| [converter](converter.md) | `var converter: `[`NetConverter`](../../com.drake.net.convert/-net-converter/index.md) |
+| [host](host.md) | 全局的域名或者ip(baseUrl)`var host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [logEnabled](log-enabled.md) | `var logEnabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [netCalls](net-calls.md) | `var netCalls: `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)`` |
+| [okHttpClient](ok-http-client.md) | `lateinit var okHttpClient: OkHttpClient` |
| [onDialog](on-dialog.md) | 全局加载框`var onDialog: `[`DialogCoroutineScope`](../../com.drake.net.scope/-dialog-coroutine-scope/index.md)`.(FragmentActivity) -> `[`Dialog`](https://developer.android.com/reference/android/app/Dialog.html) |
| [onError](on-error.md) | 全局错误处理`var onError: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
| [onStateError](on-state-error.md) | 全局缺省页错误处理`var onStateError: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`.(view: `[`View`](https://developer.android.com/reference/android/view/View.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [requestInterceptor](request-interceptor.md) | `var requestInterceptor: `[`RequestInterceptor`](../../com.drake.net.interceptor/-request-interceptor/index.md)`?` |
diff --git a/docs/api/net/com.drake.net/-net-config/log-enabled.md b/docs/api/net/com.drake.net/-net-config/log-enabled.md
new file mode 100644
index 000000000..ecc854960
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net-config/log-enabled.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [NetConfig](index.md) / [logEnabled](./log-enabled.md)
+
+# logEnabled
+
+`var logEnabled: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net-config/net-calls.md b/docs/api/net/com.drake.net/-net-config/net-calls.md
new file mode 100644
index 000000000..e922d2e57
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net-config/net-calls.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [NetConfig](index.md) / [netCalls](./net-calls.md)
+
+# netCalls
+
+`var netCalls: `[`ConcurrentLinkedQueue`](https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)``
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net-config/ok-http-client.md b/docs/api/net/com.drake.net/-net-config/ok-http-client.md
new file mode 100644
index 000000000..555261c97
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net-config/ok-http-client.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [NetConfig](index.md) / [okHttpClient](./ok-http-client.md)
+
+# okHttpClient
+
+`lateinit var okHttpClient: OkHttpClient`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net-config/request-interceptor.md b/docs/api/net/com.drake.net/-net-config/request-interceptor.md
new file mode 100644
index 000000000..54076c762
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net-config/request-interceptor.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [NetConfig](index.md) / [requestInterceptor](./request-interceptor.md)
+
+# requestInterceptor
+
+`var requestInterceptor: `[`RequestInterceptor`](../../com.drake.net.interceptor/-request-interceptor/index.md)`?`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net/add-download-listener.md b/docs/api/net/com.drake.net/-net/add-download-listener.md
new file mode 100644
index 000000000..03f9b6d84
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/add-download-listener.md
@@ -0,0 +1,16 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [addDownloadListener](./add-download-listener.md)
+
+# addDownloadListener
+
+`fun addDownloadListener(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`, progressListener: `[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+监听正在请求的下载进度
+
+### Parameters
+
+`id` - 请求的Id
+
+**See Also**
+
+[com.drake.net.request.BaseRequest.setId](../../com.drake.net.request/-base-request/set-id.md)
+
diff --git a/docs/api/net/com.drake.net/-net/add-upload-listener.md b/docs/api/net/com.drake.net/-net/add-upload-listener.md
new file mode 100644
index 000000000..48aff1f63
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/add-upload-listener.md
@@ -0,0 +1,16 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [addUploadListener](./add-upload-listener.md)
+
+# addUploadListener
+
+`fun addUploadListener(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`, progressListener: `[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+监听正在请求的上传进度
+
+### Parameters
+
+`id` - 请求的Id
+
+**See Also**
+
+[com.drake.net.request.BaseRequest.setId](../../com.drake.net.request/-base-request/set-id.md)
+
diff --git a/docs/api/net/com.drake.net/-net/cancel-all.md b/docs/api/net/com.drake.net/-net/cancel-all.md
new file mode 100644
index 000000000..a855cfd6c
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/cancel-all.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [cancelAll](./cancel-all.md)
+
+# cancelAll
+
+`fun cancelAll(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+取消全部网络请求
+
diff --git a/docs/api/net/com.drake.net/-net/cancel-group.md b/docs/api/net/com.drake.net/-net/cancel-group.md
new file mode 100644
index 000000000..4f7e42779
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/cancel-group.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [cancelGroup](./cancel-group.md)
+
+# cancelGroup
+
+`fun cancelGroup(group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+根据分组取消网络请求
+
diff --git a/docs/api/net/com.drake.net/-net/cancel-id.md b/docs/api/net/com.drake.net/-net/cancel-id.md
new file mode 100644
index 000000000..f8d36463d
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/cancel-id.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [cancelId](./cancel-id.md)
+
+# cancelId
+
+`fun cancelId(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+取消指定的网络请求
+
diff --git a/docs/api/net/com.drake.net/-net/delete.md b/docs/api/net/com.drake.net/-net/delete.md
new file mode 100644
index 000000000..187a0f41f
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/delete.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [delete](./delete.md)
+
+# delete
+
+`fun delete(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net/get.md b/docs/api/net/com.drake.net/-net/get.md
new file mode 100644
index 000000000..99f75bba8
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/get.md
@@ -0,0 +1,15 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [get](./get.md)
+
+# get
+
+`fun get(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): `
+
+同步网络请求
+
+### Parameters
+
+`path` - 请求路径, 如果其不包含http/https则会自动拼接[NetConfig.host](../-net-config/host.md)
+
+`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
+
+`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net/head.md b/docs/api/net/com.drake.net/-net/head.md
new file mode 100644
index 000000000..86f6e22af
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/head.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [head](./head.md)
+
+# head
+
+`fun head(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net/index.md b/docs/api/net/com.drake.net/-net/index.md
new file mode 100644
index 000000000..16b1e9a09
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/index.md
@@ -0,0 +1,27 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](./index.md)
+
+# Net
+
+`object Net`
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [addDownloadListener](add-download-listener.md) | 监听正在请求的下载进度`fun addDownloadListener(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`, progressListener: `[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [addUploadListener](add-upload-listener.md) | 监听正在请求的上传进度`fun addUploadListener(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`, progressListener: `[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [cancelAll](cancel-all.md) | 取消全部网络请求`fun cancelAll(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [cancelGroup](cancel-group.md) | 根据分组取消网络请求`fun cancelGroup(group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [cancelId](cancel-id.md) | 取消指定的网络请求`fun cancelId(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [delete](delete.md) | `fun delete(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): ` |
+| [get](get.md) | 同步网络请求`fun get(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): ` |
+| [head](head.md) | `fun head(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): ` |
+| [options](options.md) | `fun options(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): ` |
+| [patch](patch.md) | `fun patch(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): ` |
+| [post](post.md) | `fun post(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): ` |
+| [put](put.md) | `fun put(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): ` |
+| [removeDownloadListener](remove-download-listener.md) | 删除正在请求的下载进度监听器`fun removeDownloadListener(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`, progressListener: `[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [removeUploadListener](remove-upload-listener.md) | 删除正在请求的上传进度监听器`fun removeUploadListener(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`, progressListener: `[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [requestByGroup](request-by-group.md) | 指定分组的请求`fun requestByGroup(group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`): ` |
+| [requestById](request-by-id.md) | 指定Id的请求`fun requestById(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`): Request?` |
+| [trace](trace.md) | `fun trace(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): ` |
diff --git a/docs/api/net/com.drake.net/-net/options.md b/docs/api/net/com.drake.net/-net/options.md
new file mode 100644
index 000000000..0fc50eb41
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/options.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [options](./options.md)
+
+# options
+
+`fun options(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net/patch.md b/docs/api/net/com.drake.net/-net/patch.md
new file mode 100644
index 000000000..174cbc0a1
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/patch.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [patch](./patch.md)
+
+# patch
+
+`fun patch(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net/post.md b/docs/api/net/com.drake.net/-net/post.md
new file mode 100644
index 000000000..bafd2ee08
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/post.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [post](./post.md)
+
+# post
+
+`fun post(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net/put.md b/docs/api/net/com.drake.net/-net/put.md
new file mode 100644
index 000000000..aa659fa04
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/put.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [put](./put.md)
+
+# put
+
+`fun put(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/-net/remove-download-listener.md b/docs/api/net/com.drake.net/-net/remove-download-listener.md
new file mode 100644
index 000000000..ab5780fd5
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/remove-download-listener.md
@@ -0,0 +1,16 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [removeDownloadListener](./remove-download-listener.md)
+
+# removeDownloadListener
+
+`fun removeDownloadListener(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`, progressListener: `[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+删除正在请求的下载进度监听器
+
+### Parameters
+
+`id` - 请求的Id
+
+**See Also**
+
+[com.drake.net.request.BaseRequest.setId](../../com.drake.net.request/-base-request/set-id.md)
+
diff --git a/docs/api/net/com.drake.net/-net/remove-upload-listener.md b/docs/api/net/com.drake.net/-net/remove-upload-listener.md
new file mode 100644
index 000000000..caeef87be
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/remove-upload-listener.md
@@ -0,0 +1,16 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [removeUploadListener](./remove-upload-listener.md)
+
+# removeUploadListener
+
+`fun removeUploadListener(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`, progressListener: `[`ProgressListener`](../../com.drake.net.request/-progress-listener/index.md)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+删除正在请求的上传进度监听器
+
+### Parameters
+
+`id` - 请求的Id
+
+**See Also**
+
+[com.drake.net.request.BaseRequest.setId](../../com.drake.net.request/-base-request/set-id.md)
+
diff --git a/docs/api/net/com.drake.net/-net/request-by-group.md b/docs/api/net/com.drake.net/-net/request-by-group.md
new file mode 100644
index 000000000..e6bbe912e
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/request-by-group.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [requestByGroup](./request-by-group.md)
+
+# requestByGroup
+
+`fun requestByGroup(group: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`): `
+
+指定分组的请求
+
diff --git a/docs/api/net/com.drake.net/-net/request-by-id.md b/docs/api/net/com.drake.net/-net/request-by-id.md
new file mode 100644
index 000000000..a3d16031c
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/request-by-id.md
@@ -0,0 +1,8 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [requestById](./request-by-id.md)
+
+# requestById
+
+`fun requestById(id: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`): Request?`
+
+指定Id的请求
+
diff --git a/docs/api/net/com.drake.net/-net/trace.md b/docs/api/net/com.drake.net/-net/trace.md
new file mode 100644
index 000000000..c1bfa8e7a
--- /dev/null
+++ b/docs/api/net/com.drake.net/-net/trace.md
@@ -0,0 +1,5 @@
+[net](../../index.md) / [com.drake.net](../index.md) / [Net](index.md) / [trace](./trace.md)
+
+# trace
+
+`fun trace(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): `
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/android.app.-application/index.md b/docs/api/net/com.drake.net/android.app.-application/index.md
deleted file mode 100644
index 4cd04a631..000000000
--- a/docs/api/net/com.drake.net/android.app.-application/index.md
+++ /dev/null
@@ -1,7 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [android.app.Application](./index.md)
-
-### Extensions for android.app.Application
-
-| Name | Summary |
-|---|---|
-| [initNet](init-net.md) | 初始化框架`fun `[`Application`](https://developer.android.com/reference/android/app/Application.html)`.initNet(host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, config: Builder.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net/android.app.-application/init-net.md b/docs/api/net/com.drake.net/android.app.-application/init-net.md
deleted file mode 100644
index 130665fb3..000000000
--- a/docs/api/net/com.drake.net/android.app.-application/init-net.md
+++ /dev/null
@@ -1,24 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [android.app.Application](index.md) / [initNet](./init-net.md)
-
-# initNet
-
-`fun `[`Application`](https://developer.android.com/reference/android/app/Application.html)`.initNet(host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, config: Builder.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
-
-初始化框架
-
-### Parameters
-
-`host` - 请求url的主机名
-
-`config` -
-
-进行配置网络请求
-
-
-
-如果想要自动解析数据模型请配置转换器, 可以继承或者参考默认转换器
-
-**See Also**
-
-[com.drake.net.convert.DefaultConvert](../../com.drake.net.convert/-default-convert/index.md)
-
diff --git a/docs/api/net/com.drake.net/android.content.-context/index.md b/docs/api/net/com.drake.net/android.content.-context/index.md
deleted file mode 100644
index d4b87e66c..000000000
--- a/docs/api/net/com.drake.net/android.content.-context/index.md
+++ /dev/null
@@ -1,7 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [android.content.Context](./index.md)
-
-### Extensions for android.content.Context
-
-| Name | Summary |
-|---|---|
-| [syncDownloadImage](sync-download-image.md) | 同步下载图片, 图片宽高要求要么同时指定要么同时不指定 要求依赖 Glide`fun `[`Context`](https://developer.android.com/reference/android/content/Context.html)`.syncDownloadImage(url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, with: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 0, height: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 0): `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html) |
diff --git a/docs/api/net/com.drake.net/android.content.-context/sync-download-image.md b/docs/api/net/com.drake.net/android.content.-context/sync-download-image.md
deleted file mode 100644
index fda62f306..000000000
--- a/docs/api/net/com.drake.net/android.content.-context/sync-download-image.md
+++ /dev/null
@@ -1,16 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [android.content.Context](index.md) / [syncDownloadImage](./sync-download-image.md)
-
-# syncDownloadImage
-
-`fun `[`Context`](https://developer.android.com/reference/android/content/Context.html)`.syncDownloadImage(url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, with: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 0, height: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 0): `[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)
-
-同步下载图片, 图片宽高要求要么同时指定要么同时不指定
-要求依赖 Glide
-
-### Parameters
-
-`url` - 请求图片的绝对路径
-
-`with` - 图片宽度
-
-`height` - 图片高度
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/cache-enabled.md b/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/cache-enabled.md
deleted file mode 100644
index 24b8b2c97..000000000
--- a/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/cache-enabled.md
+++ /dev/null
@@ -1,13 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [com.yanzhenjie.kalle.KalleConfig.Builder](index.md) / [cacheEnabled](./cache-enabled.md)
-
-# cacheEnabled
-
-`fun Builder.cacheEnabled(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = NetConfig.app.cacheDir.absolutePath, password: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "cache"): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
-
-开启缓存
-
-### Parameters
-
-`path` - 缓存数据库路径
-
-`password` - 缓存数据库密码
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/index.md b/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/index.md
deleted file mode 100644
index a741e53e4..000000000
--- a/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [com.yanzhenjie.kalle.KalleConfig.Builder](./index.md)
-
-### Extensions for com.yanzhenjie.kalle.KalleConfig.Builder
-
-| Name | Summary |
-|---|---|
-| [cacheEnabled](cache-enabled.md) | 开启缓存`fun Builder.cacheEnabled(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = NetConfig.app.cacheDir.absolutePath, password: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "cache"): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
-| [onDialog](on-dialog.md) | 设置使用DialogObserver默认弹出的加载对话框 默认使用系统自带的ProgressDialog`fun Builder.onDialog(block: `[`DialogCoroutineScope`](../../com.drake.net.scope/-dialog-coroutine-scope/index.md)`.(context: FragmentActivity) -> `[`Dialog`](https://developer.android.com/reference/android/app/Dialog.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
-| [onError](on-error.md) | 该函数指定某些Observer的onError中的默认错误信息处理`fun Builder.onError(block: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
-| [onStateError](on-state-error.md) | 该函数指定某些Observer的onError中的默认错误信息处理`fun Builder.onStateError(block: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`.(view: `[`View`](https://developer.android.com/reference/android/view/View.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-dialog.md b/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-dialog.md
deleted file mode 100644
index dba655643..000000000
--- a/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-dialog.md
+++ /dev/null
@@ -1,9 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [com.yanzhenjie.kalle.KalleConfig.Builder](index.md) / [onDialog](./on-dialog.md)
-
-# onDialog
-
-`fun Builder.onDialog(block: `[`DialogCoroutineScope`](../../com.drake.net.scope/-dialog-coroutine-scope/index.md)`.(context: FragmentActivity) -> `[`Dialog`](https://developer.android.com/reference/android/app/Dialog.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
-
-设置使用DialogObserver默认弹出的加载对话框
-默认使用系统自带的ProgressDialog
-
diff --git a/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-error.md b/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-error.md
deleted file mode 100644
index 223c8c285..000000000
--- a/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-error.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [com.yanzhenjie.kalle.KalleConfig.Builder](index.md) / [onError](./on-error.md)
-
-# onError
-
-`fun Builder.onError(block: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
-
-该函数指定某些Observer的onError中的默认错误信息处理
-
-**See Also**
-
-[NetConfig.onError](../-net-config/on-error.md)
-
diff --git a/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-state-error.md b/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-state-error.md
deleted file mode 100644
index 9e708445c..000000000
--- a/docs/api/net/com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-state-error.md
+++ /dev/null
@@ -1,14 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [com.yanzhenjie.kalle.KalleConfig.Builder](index.md) / [onStateError](./on-state-error.md)
-
-# onStateError
-
-`fun Builder.onStateError(block: `[`Throwable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)`.(view: `[`View`](https://developer.android.com/reference/android/view/View.html)`) -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
-
-该函数指定某些Observer的onError中的默认错误信息处理
-
-如果不设置默认只有 解析数据错误 | 后台自定义错误 会显示吐司
-
-**See Also**
-
-[NetConfig.onStateError](../-net-config/on-state-error.md)
-
diff --git a/docs/api/net/com.drake.net/index.md b/docs/api/net/com.drake.net/index.md
index 8fa235e3e..740b6d646 100644
--- a/docs/api/net/com.drake.net/index.md
+++ b/docs/api/net/com.drake.net/index.md
@@ -6,28 +6,17 @@
| Name | Summary |
|---|---|
+| [Net](-net/index.md) | `object Net` |
| [NetConfig](-net-config/index.md) | Net的全局配置`object NetConfig` |
### Extensions for External Classes
| Name | Summary |
|---|---|
-| [android.app.Application](android.app.-application/index.md) | |
-| [android.content.Context](android.content.-context/index.md) | |
-| [com.yanzhenjie.kalle.KalleConfig.Builder](com.yanzhenjie.kalle.-kalle-config.-builder/index.md) | |
| [kotlinx.coroutines.CoroutineScope](kotlinx.coroutines.-coroutine-scope/index.md) | |
### Functions
| Name | Summary |
|---|---|
-| [syncDelete](sync-delete.md) | 同步网络请求`fun syncDelete(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M` |
-| [syncDownload](sync-download.md) | 同步文件下载, 默认Get请求`fun syncDownload(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = NetConfig.app.externalCacheDir!!.absolutePath, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, method: RequestMethod = RequestMethod.GET, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
-| [syncDownloadBody](sync-download-body.md) | 同步文件下载, 允许提交请求体方式, 默认Post请求`fun syncDownloadBody(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = NetConfig.app.externalCacheDir!!.absolutePath, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, method: RequestMethod = RequestMethod.GET, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
-| [syncGet](sync-get.md) | 同步网络请求`fun syncGet(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M` |
-| [syncHead](sync-head.md) | 同步网络请求`fun syncHead(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M` |
-| [syncOptions](sync-options.md) | 同步网络请求`fun syncOptions(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M` |
-| [syncPatch](sync-patch.md) | 同步网络请求`fun syncPatch(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M` |
-| [syncPost](sync-post.md) | 同步网络请求`fun syncPost(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M` |
-| [syncPut](sync-put.md) | 同步网络请求`fun syncPut(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M` |
-| [syncTrace](sync-trace.md) | 同步网络请求`fun syncTrace(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M` |
+| [initNet](init-net.md) | 初始化框架`fun initNet(host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "", config: Builder.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`fun initNet(host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "", config: Builder): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
diff --git a/docs/api/net/com.drake.net/init-net.md b/docs/api/net/com.drake.net/init-net.md
new file mode 100644
index 000000000..8c2bfbbc1
--- /dev/null
+++ b/docs/api/net/com.drake.net/init-net.md
@@ -0,0 +1,25 @@
+[net](../index.md) / [com.drake.net](index.md) / [initNet](./init-net.md)
+
+# initNet
+
+`fun initNet(host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "", config: Builder.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
+
+初始化框架
+
+### Parameters
+
+`host` - 请求url的主机名
+
+`config` -
+
+进行配置网络请求
+
+
+
+如果想要自动解析数据模型请配置转换器, 可以继承或者参考默认转换器
+
+**See Also**
+
+[com.drake.net.convert.JSONConvert](../com.drake.net.convert/-j-s-o-n-convert/index.md)
+
+`fun initNet(host: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = "", config: Builder): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-delete.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-delete.md
index b97b41049..861da7814 100644
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-delete.md
+++ b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-delete.md
@@ -2,18 +2,4 @@
# Delete
-`inline fun CoroutineScope.Delete(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred`
-
-异步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](../-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
+`inline fun CoroutineScope.Delete(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download-body.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download-body.md
deleted file mode 100644
index dbd19065d..000000000
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download-body.md
+++ /dev/null
@@ -1,21 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [kotlinx.coroutines.CoroutineScope](index.md) / [DownloadBody](./-download-body.md)
-
-# DownloadBody
-
-`fun CoroutineScope.DownloadBody(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = NetConfig.app.externalCacheDir!!.absolutePath, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, method: RequestMethod = RequestMethod.POST, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>`
-
-用于提交请求体下载文件(默认POST请求)
-
-### Parameters
-
-`path` - 请求路径, 非绝对路径会加上HOST[NetConfig.host](../-net-config/host.md)为前缀
-
-`method` - 请求方式, 默认GET
-
-`dir` - 下载文件存放目录 {默认存在android/data/packageName/cache目录}
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 下载链接是否是绝对路径
-
-`block` - 配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download-image.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download-image.md
deleted file mode 100644
index 348ad2e81..000000000
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download-image.md
+++ /dev/null
@@ -1,16 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [kotlinx.coroutines.CoroutineScope](index.md) / [DownloadImage](./-download-image.md)
-
-# DownloadImage
-
-`fun CoroutineScope.DownloadImage(url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, with: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = -1, height: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = -1): Deferred<`[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`>`
-
-异步下载图片, 图片宽高要求要么同时指定要么同时不指定
-要求依赖 Glide
-
-### Parameters
-
-`url` - 请求图片的绝对路径
-
-`with` - 图片宽度
-
-`height` - 图片高度
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download.md
deleted file mode 100644
index 430141887..000000000
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download.md
+++ /dev/null
@@ -1,21 +0,0 @@
-[net](../../index.md) / [com.drake.net](../index.md) / [kotlinx.coroutines.CoroutineScope](index.md) / [Download](./-download.md)
-
-# Download
-
-`fun CoroutineScope.Download(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = NetConfig.app.externalCacheDir!!.absolutePath, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, method: RequestMethod = RequestMethod.GET, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>`
-
-用于提交URL体下载文件(默认GET请求)
-
-### Parameters
-
-`path` - 请求路径, 非绝对路径会加上HOST[NetConfig.host](../-net-config/host.md)为前缀
-
-`method` - 请求方式, 默认GET
-
-`dir` - 下载文件存放目录 {默认存在android/data/packageName/cache目录}
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 下载链接是否是绝对路径
-
-`block` - 请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-get.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-get.md
index d8b6bdf93..25e2fe247 100644
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-get.md
+++ b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-get.md
@@ -2,18 +2,14 @@
# Get
-`inline fun CoroutineScope.Get(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred`
+`inline fun CoroutineScope.Get(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred`
异步网络请求
### Parameters
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](../-net-config/host.md)为前缀
+`path` - 请求路径, 如果其不包含http/https则会自动拼接[NetConfig.host](../-net-config/host.md)
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
+`tag` - 可以传递对象给Request, 一般用于在拦截器/转换器中进行针对某个接口行为判断
`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-head.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-head.md
index 017a5e327..fbd782d63 100644
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-head.md
+++ b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-head.md
@@ -2,18 +2,4 @@
# Head
-`inline fun CoroutineScope.Head(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred`
-
-异步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](../-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
+`inline fun CoroutineScope.Head(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-options.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-options.md
index 449c3d00b..43eeee21a 100644
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-options.md
+++ b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-options.md
@@ -2,18 +2,4 @@
# Options
-`inline fun CoroutineScope.Options(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred`
-
-异步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](../-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
+`inline fun CoroutineScope.Options(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-patch.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-patch.md
index 5380564e6..9e39f61c9 100644
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-patch.md
+++ b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-patch.md
@@ -2,18 +2,4 @@
# Patch
-`inline fun CoroutineScope.Patch(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred`
-
-异步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](../-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
+`inline fun CoroutineScope.Patch(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-post.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-post.md
index 36d2adc80..ce8f6f6a7 100644
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-post.md
+++ b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-post.md
@@ -2,18 +2,4 @@
# Post
-`inline fun CoroutineScope.Post(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred`
-
-异步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](../-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
+`inline fun CoroutineScope.Post(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-put.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-put.md
index 83d4220fe..852ae5011 100644
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-put.md
+++ b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-put.md
@@ -2,18 +2,4 @@
# Put
-`inline fun CoroutineScope.Put(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred`
-
-异步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](../-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
+`inline fun CoroutineScope.Put(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-trace.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-trace.md
index 293f150ae..eb0769ec7 100644
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-trace.md
+++ b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-trace.md
@@ -2,18 +2,4 @@
# Trace
-`inline fun CoroutineScope.Trace(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred`
-
-异步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](../-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
+`inline fun CoroutineScope.Trace(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred`
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/index.md b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/index.md
index 1bfbbded2..39b4be68e 100644
--- a/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/index.md
+++ b/docs/api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/index.md
@@ -4,14 +4,11 @@
| Name | Summary |
|---|---|
-| [Delete](-delete.md) | 异步网络请求`fun CoroutineScope.Delete(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred` |
-| [Download](-download.md) | 用于提交URL体下载文件(默认GET请求)`fun CoroutineScope.Download(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = NetConfig.app.externalCacheDir!!.absolutePath, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, method: RequestMethod = RequestMethod.GET, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>` |
-| [DownloadBody](-download-body.md) | 用于提交请求体下载文件(默认POST请求)`fun CoroutineScope.DownloadBody(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = NetConfig.app.externalCacheDir!!.absolutePath, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, method: RequestMethod = RequestMethod.POST, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>` |
-| [DownloadImage](-download-image.md) | 异步下载图片, 图片宽高要求要么同时指定要么同时不指定 要求依赖 Glide`fun CoroutineScope.DownloadImage(url: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, with: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = -1, height: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = -1): Deferred<`[`File`](https://docs.oracle.com/javase/6/docs/api/java/io/File.html)`>` |
-| [Get](-get.md) | 异步网络请求`fun CoroutineScope.Get(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred` |
-| [Head](-head.md) | 异步网络请求`fun CoroutineScope.Head(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred` |
-| [Options](-options.md) | 异步网络请求`fun CoroutineScope.Options(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred` |
-| [Patch](-patch.md) | 异步网络请求`fun CoroutineScope.Patch(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred` |
-| [Post](-post.md) | 异步网络请求`fun CoroutineScope.Post(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred` |
-| [Put](-put.md) | 异步网络请求`fun CoroutineScope.Put(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred` |
-| [Trace](-trace.md) | 异步网络请求`fun CoroutineScope.Trace(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = coroutineContext[CoroutineExceptionHandler], block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): Deferred` |
+| [Delete](-delete.md) | `fun CoroutineScope.Delete(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred` |
+| [Get](-get.md) | 异步网络请求`fun CoroutineScope.Get(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred` |
+| [Head](-head.md) | `fun CoroutineScope.Head(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred` |
+| [Options](-options.md) | `fun CoroutineScope.Options(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred` |
+| [Patch](-patch.md) | `fun CoroutineScope.Patch(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred` |
+| [Post](-post.md) | `fun CoroutineScope.Post(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred` |
+| [Put](-put.md) | `fun CoroutineScope.Put(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`BodyRequest`](../../com.drake.net.request/-body-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred` |
+| [Trace](-trace.md) | `fun CoroutineScope.Trace(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: (`[`UrlRequest`](../../com.drake.net.request/-url-request/index.md)`.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)? = null): Deferred` |
diff --git a/docs/api/net/com.drake.net/sync-delete.md b/docs/api/net/com.drake.net/sync-delete.md
deleted file mode 100644
index 7982b24db..000000000
--- a/docs/api/net/com.drake.net/sync-delete.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../index.md) / [com.drake.net](index.md) / [syncDelete](./sync-delete.md)
-
-# syncDelete
-
-`inline fun syncDelete(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M`
-
-同步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/sync-download-body.md b/docs/api/net/com.drake.net/sync-download-body.md
deleted file mode 100644
index 34ac4a280..000000000
--- a/docs/api/net/com.drake.net/sync-download-body.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../index.md) / [com.drake.net](index.md) / [syncDownloadBody](./sync-download-body.md)
-
-# syncDownloadBody
-
-`fun syncDownloadBody(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = NetConfig.app.externalCacheDir!!.absolutePath, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, method: RequestMethod = RequestMethod.GET, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
-
-同步文件下载, 允许提交请求体方式, 默认Post请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/sync-download.md b/docs/api/net/com.drake.net/sync-download.md
deleted file mode 100644
index 56b155665..000000000
--- a/docs/api/net/com.drake.net/sync-download.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../index.md) / [com.drake.net](index.md) / [syncDownload](./sync-download.md)
-
-# syncDownload
-
-`fun syncDownload(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, dir: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` = NetConfig.app.externalCacheDir!!.absolutePath, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, method: RequestMethod = RequestMethod.GET, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
-
-同步文件下载, 默认Get请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/sync-get.md b/docs/api/net/com.drake.net/sync-get.md
deleted file mode 100644
index 32c7a2214..000000000
--- a/docs/api/net/com.drake.net/sync-get.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../index.md) / [com.drake.net](index.md) / [syncGet](./sync-get.md)
-
-# syncGet
-
-`inline fun syncGet(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M`
-
-同步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/sync-head.md b/docs/api/net/com.drake.net/sync-head.md
deleted file mode 100644
index 29d88497c..000000000
--- a/docs/api/net/com.drake.net/sync-head.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../index.md) / [com.drake.net](index.md) / [syncHead](./sync-head.md)
-
-# syncHead
-
-`inline fun syncHead(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M`
-
-同步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/sync-options.md b/docs/api/net/com.drake.net/sync-options.md
deleted file mode 100644
index cc985b4be..000000000
--- a/docs/api/net/com.drake.net/sync-options.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../index.md) / [com.drake.net](index.md) / [syncOptions](./sync-options.md)
-
-# syncOptions
-
-`inline fun syncOptions(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M`
-
-同步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/sync-patch.md b/docs/api/net/com.drake.net/sync-patch.md
deleted file mode 100644
index 3efea59e5..000000000
--- a/docs/api/net/com.drake.net/sync-patch.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../index.md) / [com.drake.net](index.md) / [syncPatch](./sync-patch.md)
-
-# syncPatch
-
-`inline fun syncPatch(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M`
-
-同步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/sync-post.md b/docs/api/net/com.drake.net/sync-post.md
deleted file mode 100644
index bd34e5075..000000000
--- a/docs/api/net/com.drake.net/sync-post.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../index.md) / [com.drake.net](index.md) / [syncPost](./sync-post.md)
-
-# syncPost
-
-`inline fun syncPost(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M`
-
-同步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/sync-put.md b/docs/api/net/com.drake.net/sync-put.md
deleted file mode 100644
index 8d195e9f8..000000000
--- a/docs/api/net/com.drake.net/sync-put.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../index.md) / [com.drake.net](index.md) / [syncPut](./sync-put.md)
-
-# syncPut
-
-`inline fun syncPut(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M`
-
-同步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/com.drake.net/sync-trace.md b/docs/api/net/com.drake.net/sync-trace.md
deleted file mode 100644
index eabb13d39..000000000
--- a/docs/api/net/com.drake.net/sync-trace.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[net](../index.md) / [com.drake.net](index.md) / [syncTrace](./sync-trace.md)
-
-# syncTrace
-
-`inline fun syncTrace(path: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, tag: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, cache: CacheMode = CacheMode.HTTP, absolutePath: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, uid: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`? = null, noinline block: Api.() -> `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)` = {}): M`
-
-同步网络请求
-
-### Parameters
-
-`path` - String 请求路径, 非绝对路径会加上[NetConfig.host](-net-config/host.md)为前缀
-
-`tag` - 可以传递对象给Request请求, 一般用于在拦截器/转换器中进行针对某个接口行为判断
-
-`absolutePath` - 请求路径是否是绝对路径
-
-`uid` - 表示请求的唯一id, 和[NetCancel.cancel](#)中的uid一致, 一般用于指定取消网络请求的唯一id
-
-`block` - 函数中可以配置请求参数
\ No newline at end of file
diff --git a/docs/api/net/index.md b/docs/api/net/index.md
index 545c92425..c4b8346eb 100644
--- a/docs/api/net/index.md
+++ b/docs/api/net/index.md
@@ -4,9 +4,18 @@
| Name | Summary |
|---|---|
+| [androidx.lifecycle](androidx.lifecycle/index.md) | |
| [com.drake.net](com.drake.net/index.md) | |
+| [com.drake.net.body](com.drake.net.body/index.md) | |
+| [com.drake.net.cache](com.drake.net.cache/index.md) | |
+| [com.drake.net.component](com.drake.net.component/index.md) | |
| [com.drake.net.convert](com.drake.net.convert/index.md) | |
-| [com.drake.net.error](com.drake.net.error/index.md) | |
+| [com.drake.net.exception](com.drake.net.exception/index.md) | |
+| [com.drake.net.interceptor](com.drake.net.interceptor/index.md) | |
+| [com.drake.net.interfaces](com.drake.net.interfaces/index.md) | |
+| [com.drake.net.log](com.drake.net.log/index.md) | |
+| [com.drake.net.request](com.drake.net.request/index.md) | |
+| [com.drake.net.response](com.drake.net.response/index.md) | |
| [com.drake.net.scope](com.drake.net.scope/index.md) | |
| [com.drake.net.tag](com.drake.net.tag/index.md) | |
| [com.drake.net.time](com.drake.net.time/index.md) | |
diff --git a/docs/api/net/package-list b/docs/api/net/package-list
index acdc05cd2..01683650e 100644
--- a/docs/api/net/package-list
+++ b/docs/api/net/package-list
@@ -1,46 +1,82 @@
$dokka.format:gfm
$dokka.linkExtension:md
-$dokka.location:com.drake.net$Delete(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, com.yanzhenjie.kalle.simple.cache.CacheMode, kotlin.Boolean, kotlin.Any, kotlin.Function1((com.yanzhenjie.kalle.simple.SimpleBodyRequest.Api, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-delete.md
-$dokka.location:com.drake.net$Download(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.String, kotlin.Any, kotlin.Boolean, com.yanzhenjie.kalle.RequestMethod, kotlin.Any, kotlin.Function1((com.yanzhenjie.kalle.download.UrlDownload.Api, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-download.md
-$dokka.location:com.drake.net$DownloadBody(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.String, kotlin.Any, kotlin.Boolean, com.yanzhenjie.kalle.RequestMethod, kotlin.Any, kotlin.Function1((com.yanzhenjie.kalle.download.BodyDownload.Api, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-download-body.md
-$dokka.location:com.drake.net$DownloadImage(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Int, kotlin.Int)com.drake.net/kotlinx.coroutines.-coroutine-scope/-download-image.md
-$dokka.location:com.drake.net$Get(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, com.yanzhenjie.kalle.simple.cache.CacheMode, kotlin.Boolean, kotlin.Any, kotlin.Function1((com.yanzhenjie.kalle.simple.SimpleUrlRequest.Api, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-get.md
-$dokka.location:com.drake.net$Head(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, com.yanzhenjie.kalle.simple.cache.CacheMode, kotlin.Boolean, kotlin.Any, kotlin.Function1((com.yanzhenjie.kalle.simple.SimpleUrlRequest.Api, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-head.md
-$dokka.location:com.drake.net$Options(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, com.yanzhenjie.kalle.simple.cache.CacheMode, kotlin.Boolean, kotlin.Any, kotlin.Function1((com.yanzhenjie.kalle.simple.SimpleUrlRequest.Api, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-options.md
-$dokka.location:com.drake.net$Patch(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, com.yanzhenjie.kalle.simple.cache.CacheMode, kotlin.Boolean, kotlin.Any, kotlin.Function1((com.yanzhenjie.kalle.simple.SimpleBodyRequest.Api, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-patch.md
-$dokka.location:com.drake.net$Post(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, com.yanzhenjie.kalle.simple.cache.CacheMode, kotlin.Boolean, kotlin.Any, kotlin.Function1((com.yanzhenjie.kalle.simple.SimpleBodyRequest.Api, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-post.md
-$dokka.location:com.drake.net$Put(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, com.yanzhenjie.kalle.simple.cache.CacheMode, kotlin.Boolean, kotlin.Any, kotlin.Function1((com.yanzhenjie.kalle.simple.SimpleBodyRequest.Api, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-put.md
-$dokka.location:com.drake.net$Trace(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, com.yanzhenjie.kalle.simple.cache.CacheMode, kotlin.Boolean, kotlin.Any, kotlin.Function1((com.yanzhenjie.kalle.simple.SimpleUrlRequest.Api, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-trace.md
-$dokka.location:com.drake.net$cacheEnabled(com.yanzhenjie.kalle.KalleConfig.Builder, kotlin.String, kotlin.String)com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/cache-enabled.md
-$dokka.location:com.drake.net$initNet(android.app.Application, kotlin.String, kotlin.Function1((com.yanzhenjie.kalle.KalleConfig.Builder, kotlin.Unit)))com.drake.net/android.app.-application/init-net.md
-$dokka.location:com.drake.net$onDialog(com.yanzhenjie.kalle.KalleConfig.Builder, kotlin.Function2((com.drake.net.scope.DialogCoroutineScope, androidx.fragment.app.FragmentActivity, android.app.Dialog)))com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-dialog.md
-$dokka.location:com.drake.net$onError(com.yanzhenjie.kalle.KalleConfig.Builder, kotlin.Function1((kotlin.Throwable, kotlin.Unit)))com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-error.md
-$dokka.location:com.drake.net$onStateError(com.yanzhenjie.kalle.KalleConfig.Builder, kotlin.Function2((kotlin.Throwable, android.view.View, kotlin.Unit)))com.drake.net/com.yanzhenjie.kalle.-kalle-config.-builder/on-state-error.md
-$dokka.location:com.drake.net$syncDownloadImage(android.content.Context, kotlin.String, kotlin.Int, kotlin.Int)com.drake.net/android.content.-context/sync-download-image.md
-$dokka.location:com.drake.net.error$NetCancellationException(kotlinx.coroutines.CoroutineScope, kotlin.String)com.drake.net.error/kotlinx.coroutines.-coroutine-scope/-net-cancellation-exception.md
+$dokka.location:com.drake.net$Delete(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, kotlin.Function1((com.drake.net.request.BodyRequest, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-delete.md
+$dokka.location:com.drake.net$Get(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, kotlin.Function1((com.drake.net.request.UrlRequest, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-get.md
+$dokka.location:com.drake.net$Head(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, kotlin.Function1((com.drake.net.request.UrlRequest, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-head.md
+$dokka.location:com.drake.net$Options(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, kotlin.Function1((com.drake.net.request.UrlRequest, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-options.md
+$dokka.location:com.drake.net$Patch(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, kotlin.Function1((com.drake.net.request.BodyRequest, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-patch.md
+$dokka.location:com.drake.net$Post(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, kotlin.Function1((com.drake.net.request.BodyRequest, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-post.md
+$dokka.location:com.drake.net$Put(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, kotlin.Function1((com.drake.net.request.BodyRequest, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-put.md
+$dokka.location:com.drake.net$Trace(kotlinx.coroutines.CoroutineScope, kotlin.String, kotlin.Any, kotlin.Function1((com.drake.net.request.UrlRequest, kotlin.Unit)))com.drake.net/kotlinx.coroutines.-coroutine-scope/-trace.md
+$dokka.location:com.drake.net.body$addListener(okhttp3.RequestBody, java.util.concurrent.ConcurrentLinkedQueue((com.drake.net.request.ProgressListener)))com.drake.net.body/okhttp3.-request-body/add-listener.md
+$dokka.location:com.drake.net.body$addListener(okhttp3.ResponseBody, okhttp3.Request)com.drake.net.body/okhttp3.-response-body/add-listener.md
+$dokka.location:com.drake.net.exception$NetCancellationException(kotlinx.coroutines.CoroutineScope, kotlin.String)com.drake.net.exception/kotlinx.coroutines.-coroutine-scope/-net-cancellation-exception.md
+$dokka.location:com.drake.net.request$FORM#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-f-o-r-m.md
+$dokka.location:com.drake.net.request$GIF#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-g-i-f.md
+$dokka.location:com.drake.net.request$HTML#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-h-t-m-l.md
+$dokka.location:com.drake.net.request$IMG#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-i-m-g.md
+$dokka.location:com.drake.net.request$JPEG#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-j-p-e-g.md
+$dokka.location:com.drake.net.request$JSON#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-j-s-o-n.md
+$dokka.location:com.drake.net.request$MP4#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-m-p4.md
+$dokka.location:com.drake.net.request$PNG#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-p-n-g.md
+$dokka.location:com.drake.net.request$TXT#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-t-x-t.md
+$dokka.location:com.drake.net.request$URLENCODED#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-u-r-l-e-n-c-o-d-e-d.md
+$dokka.location:com.drake.net.request$XML#okhttp3.MediaType.Companioncom.drake.net.request/okhttp3.-media-type/-x-m-l.md
+$dokka.location:com.drake.net.request$converter(okhttp3.Request)com.drake.net.request/okhttp3.-request/converter.md
+$dokka.location:com.drake.net.request$downloadConflictRename(okhttp3.Request)com.drake.net.request/okhttp3.-request/download-conflict-rename.md
+$dokka.location:com.drake.net.request$downloadFileDir(okhttp3.Request)com.drake.net.request/okhttp3.-request/download-file-dir.md
+$dokka.location:com.drake.net.request$downloadFileNameDecode(okhttp3.Request)com.drake.net.request/okhttp3.-request/download-file-name-decode.md
+$dokka.location:com.drake.net.request$downloadListeners(okhttp3.Request)com.drake.net.request/okhttp3.-request/download-listeners.md
+$dokka.location:com.drake.net.request$downloadMd5Verify(okhttp3.Request)com.drake.net.request/okhttp3.-request/download-md5-verify.md
+$dokka.location:com.drake.net.request$downloadTempFile(okhttp3.Request)com.drake.net.request/okhttp3.-request/download-temp-file.md
+$dokka.location:com.drake.net.request$fileName(okhttp3.Request)com.drake.net.request/okhttp3.-request/file-name.md
+$dokka.location:com.drake.net.request$group(okhttp3.Request)com.drake.net.request/okhttp3.-request/group.md
+$dokka.location:com.drake.net.request$id(okhttp3.Request)com.drake.net.request/okhttp3.-request/id.md
+$dokka.location:com.drake.net.request$label(okhttp3.Request)com.drake.net.request/okhttp3.-request/label.md
+$dokka.location:com.drake.net.request$setConverter(okhttp3.Request.Builder, com.drake.net.convert.NetConverter)com.drake.net.request/okhttp3.-request.-builder/set-converter.md
+$dokka.location:com.drake.net.request$setGroup(okhttp3.Request.Builder, kotlin.Any)com.drake.net.request/okhttp3.-request.-builder/set-group.md
+$dokka.location:com.drake.net.request$setId(okhttp3.Request.Builder, kotlin.Any)com.drake.net.request/okhttp3.-request.-builder/set-id.md
+$dokka.location:com.drake.net.request$setLabel(okhttp3.Request.Builder, com.drake.net.request.setLabel.T)com.drake.net.request/okhttp3.-request.-builder/set-label.md
+$dokka.location:com.drake.net.request$tag(okhttp3.Request, kotlin.String)com.drake.net.request/okhttp3.-request/tag.md
+$dokka.location:com.drake.net.request$uploadListeners(okhttp3.Request)com.drake.net.request/okhttp3.-request/upload-listeners.md
+$dokka.location:com.drake.net.response$file(okhttp3.Response)com.drake.net.response/okhttp3.-response/file.md
+$dokka.location:com.drake.net.response$fileName(okhttp3.Response)com.drake.net.response/okhttp3.-response/file-name.md
$dokka.location:com.drake.net.transform$transform(kotlinx.coroutines.Deferred((com.drake.net.transform.transform.T)), kotlin.Function1((com.drake.net.transform.transform.T, com.drake.net.transform.transform.R)))com.drake.net.transform/kotlinx.coroutines.-deferred/transform.md
-$dokka.location:com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.Array((com.drake.net.transform.DeferredTransform((com.drake.net.utils.fastest.T, com.drake.net.utils.fastest.R)))))com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/fastest.md
-$dokka.location:com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.Array((kotlinx.coroutines.Deferred((com.drake.net.utils.fastest.T)))))com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/fastest.md
-$dokka.location:com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.collections.List((com.drake.net.transform.DeferredTransform((com.drake.net.utils.fastest.T, com.drake.net.utils.fastest.R)))))com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/fastest.md
-$dokka.location:com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.collections.List((kotlinx.coroutines.Deferred((com.drake.net.utils.fastest.T)))))com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/fastest.md
-$dokka.location:com.drake.net.utils$foreach(android.database.Cursor, kotlin.Function1((android.database.Cursor, kotlin.Unit)))com.drake.net.utils/android.database.-cursor/foreach.md
-$dokka.location:com.drake.net.utils$getSavedModel(androidx.fragment.app.Fragment)com.drake.net.utils/androidx.fragment.app.-fragment/get-saved-model.md
-$dokka.location:com.drake.net.utils$getSavedModel(androidx.fragment.app.FragmentActivity)com.drake.net.utils/androidx.fragment.app.-fragment-activity/get-saved-model.md
-$dokka.location:com.drake.net.utils$getViewModel(androidx.lifecycle.ViewModelStoreOwner)com.drake.net.utils/androidx.lifecycle.-view-model-store-owner/get-view-model.md
-$dokka.location:com.drake.net.utils$listen(kotlinx.coroutines.flow.Flow((kotlin.collections.List((com.drake.net.utils.listen.T)))), androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.Event, kotlinx.coroutines.CoroutineDispatcher, kotlin.Function1((kotlin.collections.List((com.drake.net.utils.listen.T)), kotlin.Unit)))com.drake.net.utils/kotlinx.coroutines.flow.-flow/listen.md
-$dokka.location:com.drake.net.utils$observe(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.LiveData((com.drake.net.utils.observe.M)), kotlin.Function1((com.drake.net.utils.observe.M, kotlin.Unit)))com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/observe.md
+$dokka.location:com.drake.net.utils$cancelGroup(okhttp3.OkHttpClient, kotlin.Any)com.drake.net.utils/okhttp3.-ok-http-client/cancel-group.md
+$dokka.location:com.drake.net.utils$cancelId(okhttp3.OkHttpClient, kotlin.Any)com.drake.net.utils/okhttp3.-ok-http-client/cancel-id.md
+$dokka.location:com.drake.net.utils$debounce(android.widget.EditText, kotlin.Long)com.drake.net.utils/android.widget.-edit-text/debounce.md
+$dokka.location:com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.collections.List((com.drake.net.transform.DeferredTransform((com.drake.net.utils.fastest.T, com.drake.net.utils.fastest.R)))), kotlin.Any)com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/fastest.md
+$dokka.location:com.drake.net.utils$fastest(kotlinx.coroutines.CoroutineScope, kotlin.collections.List((kotlinx.coroutines.Deferred((com.drake.net.utils.fastest.T)))), kotlin.Any)com.drake.net.utils/kotlinx.coroutines.-coroutine-scope/fastest.md
+$dokka.location:com.drake.net.utils$isValid#kotlin.Stringcom.drake.net.utils/kotlin.-string/is-valid.md
+$dokka.location:com.drake.net.utils$isValid(kotlin.String, kotlin.Function1((kotlin.String, kotlin.Unit)))com.drake.net.utils/kotlin.-string/is-valid.md
+$dokka.location:com.drake.net.utils$listen(kotlinx.coroutines.flow.Flow((com.drake.net.utils.listen.T)), androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.Event, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction2((kotlinx.coroutines.CoroutineScope, com.drake.net.utils.listen.T, kotlin.Unit)))com.drake.net.utils/kotlinx.coroutines.flow.-flow/listen.md
+$dokka.location:com.drake.net.utils$md5(java.io.File)com.drake.net.utils/java.io.-file/md5.md
+$dokka.location:com.drake.net.utils$onDialog(okhttp3.OkHttpClient.Builder, kotlin.Function2((com.drake.net.scope.DialogCoroutineScope, androidx.fragment.app.FragmentActivity, android.app.Dialog)))com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-dialog.md
+$dokka.location:com.drake.net.utils$onError(okhttp3.OkHttpClient.Builder, kotlin.Function1((kotlin.Throwable, kotlin.Unit)))com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-error.md
+$dokka.location:com.drake.net.utils$onStateError(okhttp3.OkHttpClient.Builder, kotlin.Function2((kotlin.Throwable, android.view.View, kotlin.Unit)))com.drake.net.utils/okhttp3.-ok-http-client.-builder/on-state-error.md
$dokka.location:com.drake.net.utils$scope(com.drake.brv.PageRefreshLayout, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction1((kotlinx.coroutines.CoroutineScope, kotlin.Unit)))com.drake.net.utils/com.drake.brv.-page-refresh-layout/scope.md
$dokka.location:com.drake.net.utils$scope(com.drake.statelayout.StateLayout, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction1((kotlinx.coroutines.CoroutineScope, kotlin.Unit)))com.drake.net.utils/com.drake.statelayout.-state-layout/scope.md
-$dokka.location:com.drake.net.utils$scope(kotlinx.coroutines.flow.Flow((com.drake.net.utils.scope.T)), androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.Event, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction1((com.drake.net.utils.scope.T, kotlin.Unit)))com.drake.net.utils/kotlinx.coroutines.flow.-flow/scope.md
+$dokka.location:com.drake.net.utils$scope(kotlinx.coroutines.flow.Flow((com.drake.net.utils.scope.T)), androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.Event, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction2((kotlinx.coroutines.CoroutineScope, com.drake.net.utils.scope.T, kotlin.Unit)))com.drake.net.utils/kotlinx.coroutines.flow.-flow/scope.md
$dokka.location:com.drake.net.utils$scopeDialog(androidx.fragment.app.Fragment, android.app.Dialog, kotlin.Boolean, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction1((kotlinx.coroutines.CoroutineScope, kotlin.Unit)))com.drake.net.utils/androidx.fragment.app.-fragment/scope-dialog.md
$dokka.location:com.drake.net.utils$scopeDialog(androidx.fragment.app.FragmentActivity, android.app.Dialog, kotlin.Boolean, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction1((kotlinx.coroutines.CoroutineScope, kotlin.Unit)))com.drake.net.utils/androidx.fragment.app.-fragment-activity/scope-dialog.md
$dokka.location:com.drake.net.utils$scopeLife(androidx.fragment.app.Fragment, androidx.lifecycle.Lifecycle.Event, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction1((kotlinx.coroutines.CoroutineScope, kotlin.Unit)))com.drake.net.utils/androidx.fragment.app.-fragment/scope-life.md
-$dokka.location:com.drake.net.utils$scopeLife(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.Event, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction1((kotlinx.coroutines.CoroutineScope, kotlin.Unit)))com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/scope-life.md
$dokka.location:com.drake.net.utils$scopeNetLife(androidx.fragment.app.Fragment, androidx.lifecycle.Lifecycle.Event, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction1((kotlinx.coroutines.CoroutineScope, kotlin.Unit)))com.drake.net.utils/androidx.fragment.app.-fragment/scope-net-life.md
-$dokka.location:com.drake.net.utils$scopeNetLife(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.Event, kotlinx.coroutines.CoroutineDispatcher, kotlin.coroutines.SuspendFunction1((kotlinx.coroutines.CoroutineScope, kotlin.Unit)))com.drake.net.utils/androidx.lifecycle.-lifecycle-owner/scope-net-life.md
+$dokka.location:com.drake.net.utils$setConverter(okhttp3.OkHttpClient.Builder, com.drake.net.convert.NetConverter)com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-converter.md
+$dokka.location:com.drake.net.utils$setHost(okhttp3.OkHttpClient.Builder, kotlin.String)com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-host.md
+$dokka.location:com.drake.net.utils$setLog(okhttp3.OkHttpClient.Builder, kotlin.Boolean)com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-log.md
+$dokka.location:com.drake.net.utils$setRequestInterceptor(okhttp3.OkHttpClient.Builder, com.drake.net.interceptor.RequestInterceptor)com.drake.net.utils/okhttp3.-ok-http-client.-builder/set-request-interceptor.md
+androidx.lifecycle
com.drake.net
+com.drake.net.body
+com.drake.net.cache
+com.drake.net.component
com.drake.net.convert
-com.drake.net.error
+com.drake.net.exception
+com.drake.net.interceptor
+com.drake.net.interfaces
+com.drake.net.log
+com.drake.net.request
+com.drake.net.response
com.drake.net.scope
com.drake.net.tag
com.drake.net.time
diff --git a/docs/auto-dialog.md b/docs/auto-dialog.md
index 3ae8e1865..7f479d3c8 100644
--- a/docs/auto-dialog.md
+++ b/docs/auto-dialog.md
@@ -26,7 +26,7 @@ scopeDialog {
=== "初始化"
```kotlin
- initNet("http://182.92.97.186/") {
+ initNet("http://github.com/") {
onDialog { // lambda返回一个Dialog对象
ProgressDialog(it).apply { // it 为 FragmentActivity
setMessage("正在努力请求中")
diff --git a/docs/cancel.md b/docs/cancel.md
index 5605f4dde..4cc970ae1 100644
--- a/docs/cancel.md
+++ b/docs/cancel.md
@@ -6,7 +6,7 @@ Net取消协程作用域自动取消内部网络请求, 也支持任意位置取
```kotlin
downloadScope = scopeNetLife {
// 下载文件
- Download("download", requireContext().filesDir.path).await()
+ val file = Get("download").await()
}
downloadScope.cancel() // 取消下载
@@ -15,7 +15,7 @@ downloadScope.cancel() // 取消下载
## 任意位置取消
-发起请求的时候要求定义一个`UID`用于指定网络请求, 然后在需要的地方使用单例对象`NetCancel`取消请求.
+发起请求的时候要求定义一个`Id`用于指定网络请求, 然后在需要的地方使用单例对象`Net.cancelId`取消请求.
创建请求
```kotlin
@@ -24,24 +24,16 @@ scopeNetLife {
}
```
-然后根据uid取消网络请求
+然后根据Id取消网络请求
```kotlin
-NetCancel.cancel("请求用户信息")
-```
+Net.cancelId("请求用户信息")
-
+Net.cancelGroup("请求分组名称") // 设置分组
+```
-> 需要注意的是一旦为网络请求设置UID你就无法在作用域执行完毕自动取消网络请求了, 因为自动取消的原理就是使用作用域
-的上下文错误处理器来作为UID
+如果你要问我请求的Group和Id有什么区别, 其实本质上两者基本上没区别, 只是为了适配不同场景下使用.
+
-```kotlin hl_lines="6"
-inline fun CoroutineScope.Get(
- path: String,
- tag: Any? = null,
- cache: CacheMode = CacheMode.HTTP,
- absolutePath: Boolean = false,
- uid: Any? = coroutineContext[CoroutineExceptionHandler],
- noinline block: SimpleUrlRequest.Api.() -> Unit = {}
-): Deferred = async(Dispatchers.IO)
-```
\ No newline at end of file
+> 需要注意的是一旦为网络请求设置分组`setGroup`你就无法在作用域执行完毕自动取消网络请求了, 因为自动取消的原理就是使用作用域
+的上下文来作为Group
\ No newline at end of file
diff --git a/docs/config.md b/docs/config.md
index 254d0f38b..281909539 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -1,35 +1,59 @@
-全局配置推荐在Application中设置
-```kotlin
-class App : Application() {
- override fun onCreate() {
- super.onCreate()
-
- // http://182.92.97.186/ 这是接口全局域名, 可以使用NetConfig.host读写
- initNet("http://182.92.97.186/") {
-
- // 大括号内部都是可选项配置
-
- converter(MoshiConvert()) // 转换器
- cacheEnabled() // 开启缓存
- setLogRecord(BuildConfig.DEBUG) // 日志记录器
- logEnabled = BuildConfig.DEBUG // LogCat异常日志
- addHeader("键" ,"值") // 全局请求头
- setHeader("覆盖键" ,"值") // 全局请求头, 键相同会覆盖
- addParam("键" ,"值") // 全局参数
+全局配置建议在Application中设置
+
+=== "普通初始化"
+
+ ```kotlin
+ class App : Application() {
+ override fun onCreate() {
+ super.onCreate()
+
+ // http://google.com/ 这是接口全局域名, 可以使用NetConfig.host进行单独的修改
+
+ initNet("http://github.com/") {
+ setLog(BuildConfig.DEBUG) // 日志记录器
+ setConverter(GsonConvert()) // 转换器
+ }
}
}
-}
-```
+ ```
-> 假设全局参数属于动态获取的, 应当使用拦截器, 在拦截器里面添加
+=== "OkHttpClient.Builder"
-initNet 作用域内可选函数
+ ```kotlin
+ class App : Application() {
+ override fun onCreate() {
+ super.onCreate()
-
+ // http://google.com/ 这是接口全局域名, 可以使用NetConfig.host进行单独的修改
+ val okHttpClientBuilder = OkHttpClient.Builder()
+ .setLog(BuildConfig.DEBUG)
+ .setConverter(GsonConvert())
+ .addInterceptor(LogRecordInterceptor(BuildConfig.DEBUG))
+
+ initNet("http://github.com/", okHttpClientBuilder)
+ }
+ }
+ ```
+
+> 配置都是可选项, 不是不初始化就不能使用
+
+在initNet函数作用域中的this属于`OkHttpClient.Builder()`, 可以配置任何OkHttp参数选项
+
+| 函数 | 描述 |
+|-|-|
+| setLog | 日志 |
+| setHost | 全局域名, 和initNet("Host")函数中的第一个参数等效 |
+| setConverter | [转换器](converter.md) |
+| setRequestInterceptor | [请求拦截器](interceptor.md) |
+| onError | [全局错误处理](error-handle.md) |
+| onStateError | [全局缺省页错误处理](error-handle.md) |
+| onDialog | [全局对话框](auto-dialog.md) |
## 动态配置
-单例对象[NetConfig](api/net/com.drake.net/-net-config/index.md)存储了初始化时的配置, 可以后期动态读写.
+单例[NetConfig](api/net/com.drake.net/-net-config/index.md)存储了初始化时的配置, 可以后期动态读写.
+
+例如Retrofit的动态`BaseURL`功能就可以直接修改`NetConfig.host`
-例如Retrofit的`baseUrl`功能就可以直接修改`NetConfig.host`
+
diff --git a/docs/convert-data-field.md b/docs/convert-data-field.md
new file mode 100644
index 000000000..a903404fe
--- /dev/null
+++ b/docs/convert-data-field.md
@@ -0,0 +1,93 @@
+
+## 转换完整的JSON
+
+一般的解析过程是以下
+
+1) 后端返回的JSON数据
+
+```json
+{
+ "code":200,
+ "msg":"错误信息",
+ "data": {
+ "name": "彭于晏"
+ }
+}
+```
+
+2) 创建数据模型
+
+```kotlin
+data class UserInfo (
+ var code:Int,
+ var msg:String,
+ var data:Info,
+) {
+
+}
+```
+
+3) 发起网络请求
+
+```kotlin
+scopeNetLife {
+ val data = Get("/list").await().data
+}
+```
+
+## 仅转换Data字段
+
+这样每次都要`await().data`才是你要的`data`对象. 有些人就想省略直接不写code和msg, 希望直接返回data. 那么在转换器里面就只解析data字段即可
+
+简化数据对象
+
+```kotlin
+data class Info (var name:String)
+```
+
+转换器只解析data字段
+
+```kotlin
+class GsonConvert : JSONConvert(code = "code", message = "msg", success = "200") {
+ private val gson = GsonBuilder().serializeNulls().create()
+
+ override fun String.parseBody(succeed: Type): S? {
+ val data = JSONObject(this).getString("data")
+ return gson.fromJson(data, succeed)
+ }
+}
+```
+
+使用简化的数据对象作为泛型
+
+```kotlin
+scopeNetLife {
+ val data = Get("/list").await().data
+}
+```
+
+## 使用泛型数据对象
+
+这种方式在Retrofit中经常被使用到, 可能某些人比较习惯
+
+数据对象
+
+```kotlin
+// 数据对象的基类
+open class BaseResult {
+ var code: Int = 0
+ var msg: String = ""
+ var data: T? = null
+}
+
+class Result(var request_method: String) : BaseResult()
+```
+
+使用泛型
+
+```kotlin
+scopeNetLife {
+ val data = Get("api").await().request_method
+}
+```
+
diff --git a/docs/convert-json-array.md b/docs/convert-json-array.md
new file mode 100644
index 000000000..44fd80696
--- /dev/null
+++ b/docs/convert-json-array.md
@@ -0,0 +1,91 @@
+首先我们知道Net可以通过泛型指定返回的数据类型
+
+```kotlin
+scopeNetLife {
+ tv_fragment.text = Post("api").await()
+}
+```
+
+如果是你解析的JSON对象中包含集合, 这种情况完全无需考虑. 直接解析JSON数组字段-data 才会存在以上的问题
+
+```json
+{
+ "code":200,
+ "msg":"错误信息",
+ "data": [
+ { "name": "彭于晏" },
+ { "name": "彭于晏" },
+ { "name": "彭于晏" }
+ ]
+}
+```
+
+如果后端直接返回JSON数组
+
+```json
+[
+ { "name": "彭于晏" },
+ { "name": "彭于晏" },
+ { "name": "彭于晏" }
+]
+```
+
+你们可能会这么写
+
+```kotlin
+scopeNetLife {
+ tv_fragment.text = Post>("api").await()
+}
+```
+
+> 但是由于Java的泛型擦除机制, 这么会发生异常无法转换成正确的数据返回
+
+
+解决办法
+
+1. 泛型使用Array替换List
+2. 泛型使用String, 然后写扩展函数转换下
+
+## 使用Array
+
+```kotlin
+scopeNetLife {
+ val arr = Post>("api").await()
+ arr.toMutableList() // 如果你就是要求集合, 可以使用函数将数组转换成集合
+}
+```
+
+## 使用扩展函数
+
+我们可以直接使用String创建一个扩展函数
+
+
+### 1. 定义解析函数
+
+创建一个顶层函数(即在类之外的函数, 直接存在kt文件中)
+
+FastJSON解析库演示
+
+```kotlin
+inline fun String.toJsonArray(): MutableList {
+ return JSON.parseArray(this, T::class.java)
+}
+```
+
+Gson解析库演示
+
+```kotlin
+inline fun String.toJsonArray(): MutableList {
+ return Gson().fromJson(this, TypeToken.getParameterized(List::class.java, T::class.java).type)
+}
+```
+
+### 2. 使用
+
+```kotlin
+scopeNetLife {
+ val listData = Post("/list").await().toJsonArray()
+}
+```
+
+> 该扩展函数太简单我就不加入到框架中了, 大家复制粘贴下就OK了
\ No newline at end of file
diff --git a/docs/convert.md b/docs/converter.md
similarity index 55%
rename from docs/convert.md
rename to docs/converter.md
index 992a8ad80..7dae2dee8 100644
--- a/docs/convert.md
+++ b/docs/converter.md
@@ -1,6 +1,6 @@
如果你想要网络请求直接返回对应的Bean或者说POJO类你就要创建自定义的转换器, 来使用JSON解析框架处理你的数据(当然你可能是使用的protocol等其他数据格式)
-在Net中转换器([Convert](https://github.com/liangjingkanji/Net/blob/master/kalle/src/main/java/com/yanzhenjie/kalle/simple/Converter.kt))负责数据解析的工作, 自定义转换器即实现Convert接口即可
+在Net中转换器NetConverter负责数据解析的工作, 自定义转换器即实现NetConverter接口即可
> 你的业务可能需要请求参数加密或者拼接一串特殊含义的参数, 或者响应信息需要解密. 请不要尝试封装Post或者Get等请求函数(这是蠢材做法), 自定义拦截器和转换器可以应对任何项目需求.
@@ -12,7 +12,7 @@
## 创建转换器
-一般情况我们可以直接继承[DefaultConvert](api/net/com.drake.net.convert/-default-convert/index.md)
+一般情况我们可以直接继承JSONConvert(因为一般接口使用的是JSON返回)
=== "Gson"
```kotlin
@@ -56,7 +56,6 @@
| success | 即`成功码`的值等于指定时才算网络请求成功 |
-
> 注意解析器(Gson或者Moshi)的对象记得定义为类成员, 这样可以不会导致每次解析都要创建一个新的对象, 减少内存消耗
@@ -66,15 +65,15 @@
=== "全局"
```kotlin hl_lines="2"
- initNet("http://182.92.97.186/") {
- converter(JsonConvert())
+ initNet("http://github.com/") {
+ setConverter(GsonConvert())
}
```
=== "单例"
```kotlin hl_lines="3"
scopeNetLife {
tv_fragment.text = Get("api"){
- convert(JsonConvert())
+ converter = JsonConvert()
}.await()
}
```
@@ -82,47 +81,74 @@
## 自定义转换器
-[DefaultConvert](https://github.com/liangjingkanji/Net/blob/master/net/src/main/java/com/drake/net/convert/DefaultConvert.kt) 实际上也只是实现Convert接口的一个抽象类
+通过实现`NetConverter`接口可以编写自己的逻辑网络请求返回的数据, `NetConvert.DEFAULT`为默认的转换器支持返回File/String/Response等
-> 当你对DefaultConvert有更多需求或者功能扩展的话可以重写DefaultConvert的`convert`函数, 或直接实现Convert接口
+```kotlin
+val DEFAULT = object : NetConverter {
+
+ override fun onConvert(
+ succeed: Type,
+ response: Response
+ ): R? {
+ return when (succeed) {
+ String::class.java -> response.body?.string() as R
+ ByteString::class.java -> response.body?.byteString() as R
+ ByteArray::class.java -> response.body?.bytes() as R
+ Response::class.java -> response as R
+ File::class.java -> response.file() as R
+ else -> throw ConvertException(
+ response,
+ "The default converter does not support this type"
+ )
+ }
+ }
+}
+```
+
+框架中自带一个`JSONConverter`可以作为参考或者直接使用. 其可以转换JSON数据.
源码如下
```kotlin
-abstract class DefaultConvert(
+abstract class JSONConvert(
val success: String = "0",
val code: String = "code",
val message: String = "msg"
-) : Converter {
-
- override fun convert(
- succeed: Type,
- request: Request,
- response: Response,
- cache: Boolean
- ): S? {
- val body = response.body().string()
- response.log = body // 日志记录响应信息
- val code = response.code()
- when {
- code in 200..299 -> { // 请求成功
- val jsonObject = JSONObject(body) // 获取JSON中后端定义的错误码和错误信息
- if (jsonObject.getString(this.code) == success) { // 对比后端自定义错误码
- return if (succeed === String::class.java) body as S else body.parseBody(succeed)
- } else { // 错误码匹配失败, 开始写入错误异常
- throw ResponseException(code, jsonObject.getString(message), request, body)
+) : NetConverter {
+
+ override fun onConvert(succeed: Type, response: Response): R? {
+ try {
+ return NetConverter.DEFAULT.onConvert(succeed, response)
+ } catch (e: ConvertException) {
+ val body = response.body?.string() ?: return null
+ val code = response.code
+ when {
+ code in 200..299 -> { // 请求成功
+ if (succeed === String::class.java) return body as R
+ val jsonObject = JSONObject(body) // 获取JSON中后端定义的错误码和错误信息
+ if (jsonObject.getString(this.code) == success) { // 对比后端自定义错误码
+ return body.parseBody(succeed)
+ } else { // 错误码匹配失败, 开始写入错误异常
+ throw ResponseException(response, jsonObject.getString(message))
+ }
}
+ code in 400..499 -> throw RequestParamsException(response) // 请求参数错误
+ code >= 500 -> throw ServerResponseException(response) // 服务器异常错误
+ else -> throw ConvertException(response)
}
- code in 400..499 -> throw RequestParamsException(code, request) // 请求参数错误
- code >= 500 -> throw ServerResponseException(code, request) // 服务器异常错误
- else -> throw ParseError(request)
}
}
+ /**
+ * 反序列化JSON
+ *
+ * @param succeed JSON对象的类型
+ * @receiver 原始字符串
+ */
abstract fun String.parseBody(succeed: Type): S?
}
```
-DefaultConvert对于的核心逻辑
+JSONConvert的核心逻辑
1. 判断服务器错误码
1. 判断后端自定义错误码
diff --git a/docs/css/extra.css b/docs/css/extra.css
index 00f46b1ff..91be4bd1c 100644
--- a/docs/css/extra.css
+++ b/docs/css/extra.css
@@ -36,10 +36,9 @@
/*字体渲染*/
@font-face{
- font-family: 'JetBrains Mono';
- src: local('JetBrains Mono'),
- url('https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/webfonts/JetBrainsMono-Regular.woff2') format('woff2'),
- url('https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/ttf/JetBrainsMono-Regular.ttf') format('truetype');
+ font-family: 'PT Code';
+ src: local('PT Code'),
+ url('https://raw.githubusercontent.com/liangjingkanji/PTCode/master/font/PTCode-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@@ -47,13 +46,16 @@
-webkit-font-feature-settings: "liga" on, "calt" on;
-webkit-font-smoothing: subpixel-antialiased;
text-rendering: optimizeLegibility;
- font-family: 'JetBrains Mono' !important;
+ font-family: 'PT Code' !important;
text-shadow: #33333333 0px 0px 1px !important;
}
/*布局*/
+.md-content {
+ max-width: 49.5rem;
+}
.md-grid {
- max-width: 120em !important;
+ max-width: 80rem;
}
/*表格*/
diff --git a/docs/download-file.md b/docs/download-file.md
index 325c93b51..bce73ffb7 100644
--- a/docs/download-file.md
+++ b/docs/download-file.md
@@ -2,33 +2,36 @@
```kotlin
scopeNetLife {
- Download("download", requireContext().filesDir.path).await()
+ val file = Get("download").await()
}
```
+Download函数一调用就会开始执行下载文件请求, 然后`await`则会等待下载文件完成然后返回一个File对象
+
+下载文件的配置选项
-这里演示一个包含下载进度监听的
```kotlin
scopeNetLife {
- val filePath = Download("download", requireContext().filesDir.path) {
- // 下载进度回调
- onProgress { progress, byteCount, speed ->
- // 进度条
- seek.progress = progress
-
- // 格式化显示单位
- val downloadSize = Formatter.formatFileSize(requireContext(), byteCount)
- val downloadSpeed = Formatter.formatFileSize(requireContext(), speed)
-
- // 显示下载信息
- tv_progress.text = "下载进度: $progress% 已下载: $downloadSize 下载速度: $downloadSpeed"
- }
- }.await()
+ val file =
+ Get("https://download.sublimetext.com/Sublime%20Text%20Build%203211.dmg") {
+ setDownloadFileName("net.apk")
+ setDownloadDir(requireContext().filesDir)
+ setDownloadMd5Verify()
+ }.await()
}
```
-Download函数一调用就会开始执行下载文件请求, 然后`await`则会等待下载文件完成然后返回一个文件下载完成后的地址, 示例中即`filePath`.
-
+配置选项
+
+| 函数 | 描述 |
+|-|-|
+| setDownloadFileName | 下载的文件名称 |
+| setDownloadDir | 下载保存的目录 |
+| setDownloadMd5Verify | 下载是否开启MD5校验, 如果服务器返回 "Content-MD5"响应头和制定路径已经存在的文件MD5相同是否直接返回File, 不会重新下载 |
+| setDownloadFileNameConflict | 下载文件名如果在指定路径下存在同名会自动重新命名, 例如`file_name(1).apk` |
+| setDownloadFileNameDecode | 文件名称是否使用URL解码, 例如下载的文件名如果是中文, 服务器传输给你的会是被URL编码的字符串. 你使用URL解码后才是可读的中文名称 |
+| setDownloadTempFile | 下载是否使用临时文件, 避免下载失败后覆盖同名文件或者无法判别是否已下载完整, 仅在下载完整以后才会显示为原有文件名 |
+| addDownloadListener | 下载进度监听器, 具体介绍在[进度监听](progress.md)中 |
> 不使用`await`函数则下载报错也不会被Net捕捉到, 将会被忽略, 使用await则会触发Net的错误处理, 终止当前作用域(scope)内其他网络请求, 被Net全局错误处理捕获
diff --git a/docs/download-image.md b/docs/download-image.md
deleted file mode 100644
index 7097e8f2b..000000000
--- a/docs/download-image.md
+++ /dev/null
@@ -1,16 +0,0 @@
-下载图片需要依赖[Glide](https://github.com/bumptech/glide)
-
-这个下载图片函数`DownloadImage`和下载文件函数`Download`不同在于他可以裁剪图片
-
-```kotlin
-scopeDialog {
- val file = DownloadImage(NetConfig.host + "download/img", 100, 100).await()
- val uri = Uri.fromFile(file)
- iv_img.setImageURI(uri)
-}
-```
-
-
-DownloadImage的第一个参数Url不会包含`baseUrl`, 所以你可以看到我手动`NetConfig.host + "download/img"`.
-
-> 这是因为一般项目设计中图片都是单独与服务器之外的地址, 例如CDN图床, 所以默认不自动拼接baseUrl
\ No newline at end of file
diff --git a/docs/enqueue-request.md b/docs/enqueue-request.md
new file mode 100644
index 000000000..59af3ec0d
--- /dev/null
+++ b/docs/enqueue-request.md
@@ -0,0 +1,46 @@
+Net支持OkHttp的原有的队列请求 -- `enqueue`
+
+> 队列属于接口回调请求, 由于其代码复杂, 非特殊情况下还是建议使用协程发起请求
+
+```kotlin
+Net.post("api").enqueue(object : Callback {
+ override fun onFailure(call: Call, e: IOException) {
+ }
+
+ override fun onResponse(call: Call, response: Response) {
+ }
+})
+```
+
+## NetCallback
+
+原始的Callback是没有任何数据转换和全局错误功能的. 这里可以使用NetCallback
+
+```kotlin
+Net.post("api") {
+ param("password", "Net123")
+}.enqueue(object : NetCallback() {
+ override fun onSuccess(call: Call, data: String) {
+ tv_fragment.text = data
+ }
+})
+```
+
+NetCallback相较于Callback的特性
+
+1. 可以指定泛型数据转换
+2. 新增三个回调函数: onSuccess/onFailure/onComplete
+3. 以上三个回调函数都运行在主线程
+
+|请求函数|描述|
+|-|-|
+|Net.get|标准Http请求方法|
+|Net.post|标准Http请求方法|
+|Net.head|标准Http请求方法|
+|Net.options|标准Http请求方法|
+|Net.trace|标准Http请求方法|
+|Net.delete|标准Http请求方法|
+|Net.put|标准Http请求方法|
+|Net.patch|标准Http请求方法|
+
+
diff --git a/docs/global-error-handle.md b/docs/error-handle.md
similarity index 79%
rename from docs/global-error-handle.md
rename to docs/error-handle.md
index 97a657656..a317de91c 100644
--- a/docs/global-error-handle.md
+++ b/docs/error-handle.md
@@ -51,25 +51,20 @@ catch里面的`it`属于异常对象, 这里列举可能存在的异常
| 异常 | 描述 |
|-|-|
-| NetworkError | 无网络 |
-| URLError | 地址错误 |
-| HostError | 域名错误 |
-| ConnectTimeoutError | 连接超时 |
-| ReadTimeoutError | 读取超时 |
-| DownloadError | 下载异常 |
-| NoCacheError | 没有缓存 |
-| ParseError | 解析错误, `Convert`中发生的未捕获异常都算解析错误 |
+| NetworkingException | 无网络 |
+| URLParseException | 地址错误 |
+| UnknownHostException | 域名错误 |
+| NetSocketTimeoutException | 连接超时 |
+| DownloadFileException | 下载文件异常 |
+| ConvertException | 解析错误, `NetConvert`中发生的未捕获异常都算解析错误 |
| RequestParamsException | 请求参数错误 `400 - 499` 范围内错误码 |
| ServerResponseException | 服务器错误 `500 - 599` 范围内错误码 |
-| ExecutionException | 加载图片异常等 |
-| NullPointerException | 空指针, 一般是在作用域内操作一个空的对象 |
-| ConnectException | 连接异常 |
-| WriteException | 写入异常 |
-| ReadException | 读取异常 |
| ResponseException | 响应异常, 这里属于后端返回的错误码和其定义的成功码不匹配 |
-| NetException | 网络异常, 未知的网络异常, 一般情况应当继承他来创建自定义的网络异常 |
+| NullPointerException | 空指针, 一般是在作用域内操作一个空的对象 |
+| NoCacheException | 没有缓存 |
+| NetException | 未知的网络异常, 一般情况应当继承他来创建自定义的网络异常 |
-假设你重写`DefaultConvert`可以改变异常发生的条件, 当然你在转换器或者拦截器中抛出任何异常都会被捕获或者全局处理, 这里你可以自定义你的异常
+假设你重写`NetConverter`可以改变异常发生的条件, 当然你在转换器或者拦截器中抛出任何异常都会被捕获或者全局处理, 这里你可以自定义你的异常
## 覆盖默认错误处理
@@ -80,8 +75,9 @@ catch里面的`it`属于异常对象, 这里列举可能存在的异常
源码位于: `NetConfig`
-
+
+缺省页的错误处理是单独的: `onStateError`
### 2) 仅覆盖错误信息
diff --git a/docs/exception-track.md b/docs/exception-track.md
index 6936b9e2f..e9a4cd190 100644
--- a/docs/exception-track.md
+++ b/docs/exception-track.md
@@ -1,7 +1,6 @@
-Net对于网络发送的异常追踪非常详细, 不仅是网络的还是异步任务的异常处理都非常独到
+Net中网络请求导致的异常都会在LogCat中打印, 同时被全局的NetConfig的onError拦截到
-
-> 只有网络错误就会在LogCat打印出异常信息, 并且跟随其地址信息
+> Net的异常对象通常会携带Request或者Response对象. 可以精准定位到请求信息
演示访问一个不存在的请求路径(但是URL存在)
@@ -12,21 +11,21 @@ scopeNetLife {
}
```
-查看LogCat
+查看LogCat可以看到异常堆栈信息
-
+
这属于请求参数错误404, 将会打印出错误码以及请求的URL.
-
-同时任何网络请求错误都将在LogCat查看, 并且Convert(转换器)和Interceptor(拦截器)中都可以通过`request/response`获取请求/响应的信息.
### 关闭日志
在初始化时候可以关闭日志打印
```kotlin
-initNet("http://182.92.97.186/") {
- logEnabled = true // 默认即为true
+initNet("http://github.com/") {
+ setLog(false) // 关闭日志
}
-```
\ No newline at end of file
+```
+
+或者设置字段`NetConfig.logEnabled`的值
\ No newline at end of file
diff --git a/docs/https.md b/docs/https.md
new file mode 100644
index 000000000..34e5f3107
--- /dev/null
+++ b/docs/https.md
@@ -0,0 +1,68 @@
+Https访问主要就是证书配置问题, Net可以使用OkHttp一切函数组件, 且简化证书配置流程
+
+> OkHttp如何配置证书, Net就可以如何配置证书
+
+## 使用CA证书
+
+Https如果是使用的CA颁发的证书, 不需要任何配置Net可以直接访问
+
+```kotlin
+scopeNetLife {
+ tv_fragment.text = Get("https://github.com/").await()
+}
+```
+
+## 信任所有证书
+
+信任所有证书可以解决无法访问私有证书的Https地址问题, 但是这么做就失去了使用证书的含义, 不建议此做法
+
+=== "全局配置"
+
+ ```kotlin
+ initNet("https://www.google.com/"){
+ trustSSLCertificate() // 信任所有证书
+ }
+ ```
+=== "单例配置"
+
+ ```kotlin
+ scopeNetLife {
+ Get("https://github.com/"){
+ setClient {
+ trustSSLCertificate()
+ }
+ }.await()
+ }
+ ```
+
+## 导入证书
+
+私有证书可以放到任何位置, 只要能读取到`InputStream`流对象即可
+
+=== "全局配置"
+
+ ```kotlin
+ initNet("http://github.com/") {
+ val privateCertificate = resources.assets.open("https.certificate")
+ setSSLCertificate(privateCertificate)
+ }
+ ```
+
+=== "单例配置"
+
+ ```kotlin
+ scopeNetLife {
+ Get("https://github.com/") {
+ setClient {
+ val privateCertificate = resources.assets.open("https.certificate") // 这里的证书是放到应用的资产目录下
+ setSSLCertificate(privateCertificate)
+ }
+ }.await()
+ }
+ ```
+
+
+
+
+
+
diff --git a/docs/index.md b/docs/index.md
index d4b40a477..a773ffe38 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,4 +1,10 @@
-Net使用协程发起网络, 但是即使不会协程也可以使用该框架
+本框架使用OkHttp作为请求内核, 使用Kotlin语言扩展OkHttp的函数设计
+
+
+非常欢迎共同贡献代码
+
+
+Net支持使用协程发起网络, 当然即使不会协程也可以使用该框架.
这里演示发起网络`请求百度网站`内容的三个步骤
@@ -70,14 +76,9 @@ scopeNetLife { // 创建作用域
|请求函数|描述|
|-|-|
-|`param`|请求体参数|
-|`path`|路径|
-|`urlParam`|Url参数|
-|`file`|上传文件|
-|`binary`|二进制|
-|`binaries`|多个二进制|
-|`body`|自定义请求体|
+|`param`|支持基础类型/文件/RequestBody/Part|
|`json`|请求参数为JSONObject/JsonArray/String|
+|`setQuery`|Url参数, 如果当前请求的Url请求则该函数等效于`param`函数|
@@ -128,9 +129,10 @@ scopeNetLife { // 创建作用域
}
```
-对于某些可能JSON请求参数存在固定值, 可以考虑继承JsonBody来扩展出自己的新的Body(), 然后使用`body`函数传入请求中.
+对于某些可能JSON请求参数存在固定值:
-> JsonBody实际上也是继承自StringBody
+1. 可以考虑继承RequestBody来扩展出自己的新的Body(), 然后使用`param`函数传入请求中.
+2. 定义拦截器
## RESTFUL
@@ -188,37 +190,15 @@ private fun OPTIONS() {
## 函数
-### 异步请求
-即会在IO线程执行网络请求, 要求在作用域内执行
+即会在IO线程执行网络请求, 要求在协程作用域内执行
-|异步请求函数|描述|
-|-|-|
-| [Get](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-get.md)|标准REST FUL|
-| [Post](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-post.md)|标准REST FUL|
-| [Head](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-head.md)|标准REST FUL|
-| [Options](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-options.md)|标准REST FUL|
-| [Trace](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-trace.md)|标准REST FUL|
-| [Delete](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-delete.md)|标准REST FUL|
-| [Put](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-put.md)|标准REST FUL|
-| [Patch](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-patch.md)|标准REST FUL|
-| [Download](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download.md)|下载文件(默认Get)|
-| [DownloadBody](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download-body.md)|下载文件(默认Post, 附带请求体)|
-| [DownloadImage](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-download-image.md)|下载图片(可指定图片大小), 如果使用要求依赖Glide|
-
-### 同步请求
-
-即在当前线程执行, 会阻塞当前线程
-
-|同步请求函数|描述|
+|请求函数|描述|
|-|-|
-|syncGet|标准REST FUL|
-|syncPost|标准REST FUL|
-|syncHead|标准REST FUL|
-|syncOptions|标准REST FUL|
-|syncTrace|标准REST FUL|
-|syncDelete|标准REST FUL|
-|syncPut|标准REST FUL|
-|syncPatch|标准REST FUL|
-|syncDownload|下载文件(默认Get)|
-|syncDownloadBody|下载文件(默认Post, 附带请求体)|
-|syncDownloadImage|下载图片(可指定图片大小), 如果使用要求依赖Glide|
\ No newline at end of file
+| [Get](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-get.md)|标准Http请求方法|
+| [Post](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-post.md)|标准Http请求方法|
+| [Head](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-head.md)|标准Http请求方法|
+| [Options](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-options.md)|标准Http请求方法|
+| [Trace](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-trace.md)|标准Http请求方法|
+| [Delete](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-delete.md)|标准Http请求方法|
+| [Put](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-put.md)|标准Http请求方法|
+| [Patch](api/net/com.drake.net/kotlinx.coroutines.-coroutine-scope/-patch.md)|标准Http请求方法|
\ No newline at end of file
diff --git a/docs/interceptor.md b/docs/interceptor.md
index 71d5deca0..b5400df00 100644
--- a/docs/interceptor.md
+++ b/docs/interceptor.md
@@ -1,7 +1,7 @@
-拦截器一般用于修改请求的参数, Net拦截器和Okhttp使用方式一样
+拦截器(Interceptor)一般用于修改请求的参数或者进行请求转发/重试. Net就是使用的OkHttp的拦截器. 所以支持市面上的所有OkHttp拦截器组件库
-> 你的业务可能需要请求参数加密或者拼接一串特殊含义的参数, 或者响应信息需要解密. 请不要尝试封装Post或者Get等请求函数(这是蠢材做法), 自定义拦截器和转换器可以应对任何项目需求.
+> 你的业务可能需要请求参数加密或者拼接一串特殊含义的参数, 或者响应信息需要解密. 请不要一上来就封装Post或者Get等请求函数(这是愚蠢的做法), 自定义拦截器和转换器可以应对任何项目需求.
```kotlin
@@ -9,22 +9,28 @@ class App : Application() {
override fun onCreate() {
super.onCreate()
- initNet("http://182.92.97.186/") {
+ initNet("http://github.com/") {
addInterceptor { chain -> chain.proceed(chain.request()) }
}
}
}
```
-添加多个拦截器
-```kotlin
-class App : Application() {
- override fun onCreate() {
- super.onCreate()
+## 请求拦截器
+
+RequestInterceptor属于轻量级的请求拦截器, 在每次请求的时候该拦截器都会被触发. 一般用于添加全局的参数和请求头
- initNet("http://182.92.97.186/") {
- addInterceptors(RedirectInterceptor(), LogInterceptor())
+初始化时添加请求拦截器的示例代码
+
+```kotlin
+initNet("http://github.com/") {
+ setRequestInterceptor(object : RequestInterceptor {
+ override fun interceptor(request: BaseRequest) {
+ request.param("client", "Net")
+ request.setHeader("token", "123456")
}
- }
+ })
}
-```
\ No newline at end of file
+```
+
+可以看到`setRequestInterceptor`是set开头. 仅支持一个请求拦截器, 不像`addInterceptor`支持多个请求拦截器
\ No newline at end of file
diff --git a/docs/log-recorder.md b/docs/log-recorder.md
index ce11146a8..ffb01d499 100644
--- a/docs/log-recorder.md
+++ b/docs/log-recorder.md
@@ -1,6 +1,6 @@
-一般网络请求都会选择在LogCat打印网络日志信息, 但是AndroidStudio的LogCat超长文本会被切割, 甚至发生不完整的情况, 而且容易和其他日志掺杂, 导致可读性差.
+一般网络请求都会选择在LogCat打印网络日志信息, 但LogCat日志可读性差, 甚至不完整
-Net扩展`Okhttp Profiler`插件支持更好的日志拦截信息, 支持加密的请求和响应信息
+Net扩展`Okhttp Profiler`插件支持更好的网络日志输出, 支持加密的请求和响应信息
## 安装插件
@@ -20,10 +20,9 @@ Net扩展`Okhttp Profiler`插件支持更好的日志拦截信息, 支持加密
### 3) 初始化
-```kotlin hl_lines="3"
-initNet("http://182.92.97.186/") {
- converter(JsonConvert()) // 转换器
- setLogRecord(true) // 开启日志记录功能
+```kotlin hl_lines="2"
+initNet("http://github.com/") {
+ addInterceptor(LogRecordInterceptor(BuildConfig.DEBUG))
}
```
@@ -39,61 +38,18 @@ initNet("http://182.92.97.186/") {
|
清空 | 清空记录 |
-### 响应字符串解密
-
-假设你使用的是`DefaultConvert`或者没有使用转换器直接返回String则无需多余处理, 如果覆写或者直接实现的`Convert`, 请确保`result.logResponseBody`被赋值
-```kotlin hl_lines="16"
-@Suppress("UNCHECKED_CAST")
-abstract class DefaultConvert(
- val success: String = "0",
- val code: String = "code",
- val message: String = "msg"
-) : Converter {
-
- override fun convert(
- succeed: Type,
- request: Request,
- response: Response,
- cache: Boolean
- ): S? {
- val body = response.body().string()
- response.log = body // 将字符串响应赋值给response.log
- // .... 其他操作
- }
-}
-```
-> 假设后端返回的加密数据, 可以为`response.log`赋值解密后的字符串
-
-
-### 请求参数加密
+## 单例禁用
-假设请求参数为加密后的字符串请在拦截器中为日志记录器赋值请求参数字符串
-
-```kotlin hl_lines="5"
-class NetInterceptor : Interceptor {
- override fun intercept(chain: Chain): Response {
- val request = chain.request()
-
- request.log = "解密后的请求参数字符串"
-
- return chain.proceed(request)
- }
+```kotlin
+scopeNetLife {
+ tv_fragment.text = Get("api") {
+ setLogRecord(false) // 为当前请求禁用日志记录
+ }.await()
}
```
-
-
-响应和请求都可以设置日志信息, 以在插件中查看
-
-| 函数 | 描述 |
-|-|-|
-| request.log | 请求的日志信息, 默认是params |
-| response.log | 响应的日志信息, 默认为空 |
-
-
-
## LogCat冗余日志过滤
实际上Net的网络日志还是会被打印到LogCat, 然后通过插件捕捉显示.
diff --git a/docs/okhttp-client.md b/docs/okhttp-client.md
new file mode 100644
index 000000000..5952cf980
--- /dev/null
+++ b/docs/okhttp-client.md
@@ -0,0 +1,47 @@
+每个请求都会存在一个客户端对象(OkHttpClient)
+
+Net在全局维护了一个OkHttpClient对象, 在NetConfig.okHttpClient的字段
+
+```kotlin
+object NetConfig {
+ var okHttpClient: OkHttpClient
+}
+```
+
+同时每次可以创建一个新的客户端来发起请求区别于全局配置
+
+## 全局OkHttpClient
+
+```kotlin
+initNet("http://43.128.31.195/") {
+ // 此处this即为OkHttpClient.Builder
+}
+```
+
+
+## 单例OkHttpClient
+
+每个请求可能存在独立的OkHttpClient配置, 我们可以单例配置客户端选项
+
+1. 在全局的OkHttpClient配置基础下修改
+
+```kotlin
+scopeNetLife {
+ tv_response.text = Get("https://github.com/") {
+ setClient {
+ // 此处this即为OkHttpClient.Builder
+ trustCertificate()
+ }
+ }.await()
+}
+```
+
+2. 完全重新创建一个OkHttpClient, 一般情况不推荐重新创建一个OkHttpClient, 因为一个新的OkHttpClient会重新创建线程池/连接池等造成内存消耗等
+
+```kotlin
+scopeNetLife {
+ tv_response.text = Get("https://github.com/") {
+ okHttpClient = OkHttpClient.Builder().build()
+ }.await()
+}
+```
\ No newline at end of file
diff --git a/docs/parallel.md b/docs/parallel.md
index e494632aa..7e7501ac4 100644
--- a/docs/parallel.md
+++ b/docs/parallel.md
@@ -1,8 +1,6 @@
Net在2.0开始引入协程来支持并发和异步, 虽然很多网络框架支持协程, 但是Net对于协程生命周期的控制算得上是独有.
并且Net不仅仅网络请求, 其也支持创建任何异步任务.
-
-
> 这里的`同时/并发/并行`统称为并发(具体是不是并行不需要开发者来考虑)
diff --git a/docs/parse-list.md b/docs/parse-list.md
deleted file mode 100644
index 9d0f31e11..000000000
--- a/docs/parse-list.md
+++ /dev/null
@@ -1,108 +0,0 @@
-一般的解析过程是以下
-
-1) 后端返回的JSON数据
-
-```json
-{
- "code":200,
- "msg":"错误信息",
- "data": {
- "name": "彭于晏"
- }
-}
-```
-
-2) 创建数据模型
-
-```kotlin
-data class UserInfo (
- var code:Int,
- var msg:String,
- var data:Info,
-) {
- data class Info (var name:String)
-}
-```
-
-3) 发起网络请求
-
-```kotlin
-scopeNetLife {
- val data = Get("/list").await().data
-}
-```
-
-这样每次都要`await().data`才是你要的`data`对象. 有些人就想省略直接不写code和msg, 希望直接返回data.
-
-这样的确可以, 但是面临一个问题, 部分后端开发可能让data直接为JSON数组.
-
-例如这种格式
-
-```json
-{
- "code":200,
- "msg":"错误信息",
- "data": [
- { "name": "彭于晏" },
- { "name": "吴彦祖" },
- { "name": "金城武" }
- ]
-}
-```
-
-由于Java的类型擦除机制, List的泛型在运行时将被擦除, 导致Gson或者FastJson等无法解析出正确的List数据
-
-> 在Net的未来版本`3.0`中将支持直接返回List/Map/Pair等, 无需任何处理, 泛型是什么就返回什么
-
-所以这样的代码将报错
-```kotlin
-scopeNetLife {
- val data = Get>("/list").await().data
-}
-```
-
-这里我推荐的解决方式是, 针对会data会为JSON数组的情况, 我们可以直接使用String创建一个扩展函数
-
-### 1) 摘取字段
-
-你要保证`await()`返回的只有data的值, 而不是完整Json, 因为Json字符串必须和数据类字段匹配才能解析成功(这是解析JSON的常识和网络请求无关)
-
-重写`convert`函数, 让转换器仅返回`data`
-
-
-
-### 2) 定义解析函数
-
-创建一个顶层函数(即在类之外的函数, 直接存在kt文件中)
-```kotlin
-inline fun String.toJsonArray(): MutableList {
- return JSON.parseArray(this, T::class.java)
-}
-```
-
-`JSON.parseArray`这是FastJson的函数, 如果你使用的是Gson可以使用
-
-```kotlin
-inline fun