Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DiDi
DoraemonKit
提交
91e8a5f5
D
DoraemonKit
项目概览
DiDi
/
DoraemonKit
10 个月 前同步成功
通知
166
Star
19623
Fork
3062
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
DoraemonKit
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
91e8a5f5
编写于
8月 05, 2020
作者:
金
金台
提交者:
GitHub
8月 05, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #633 from alvince/issue/network-monitor-gzip
Fix: handle decoding gzip from response for network-record
上级
b6d088b0
c107f6cd
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
86 addition
and
53 deletion
+86
-53
Android/java/app/src/debug/java/com/didichuxing/doraemondemo/MainDebugActivity.kt
...ug/java/com/didichuxing/doraemondemo/MainDebugActivity.kt
+12
-10
Android/java/app/src/main/java/com/didichuxing/doraemondemo/retrofit/GithubService.kt
...va/com/didichuxing/doraemondemo/retrofit/GithubService.kt
+0
-1
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/core/DefaultResponseHandler.java
.../doraemonkit/kit/network/core/DefaultResponseHandler.java
+1
-1
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/core/NetworkInterpreter.java
...xing/doraemonkit/kit/network/core/NetworkInterpreter.java
+22
-34
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/okhttp/interceptor/DoraemonInterceptor.java
...t/kit/network/okhttp/interceptor/DoraemonInterceptor.java
+8
-7
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/utils/OkHttpResponse.kt
...dichuxing/doraemonkit/kit/network/utils/OkHttpResponse.kt
+40
-0
Android/java/gradle.properties
Android/java/gradle.properties
+3
-0
未找到文件。
Android/java/app/src/debug/java/com/didichuxing/doraemondemo/MainDebugActivity.kt
浏览文件 @
91e8a5f5
...
...
@@ -71,6 +71,12 @@ class MainDebugActivity : BaseActivity(), View.OnClickListener {
private
var
mTencentLocationManager
:
TencentLocationManager
?
=
null
private
val
UPDATE_UI
=
100
private
val
retrofit
=
Retrofit
.
Builder
()
.
baseUrl
(
"https://api.github.com/"
)
.
addCallAdapterFactory
(
RxJava2CallAdapterFactory
.
create
())
.
addConverterFactory
(
GsonConverterFactory
.
create
())
.
build
()
/**
* github 接口
*/
...
...
@@ -145,11 +151,6 @@ class MainDebugActivity : BaseActivity(), View.OnClickListener {
.
build
()
ImageLoader
.
getInstance
().
init
(
config
)
val
retrofit
=
Retrofit
.
Builder
()
.
baseUrl
(
"https://api.github.com/"
)
.
addCallAdapterFactory
(
RxJava2CallAdapterFactory
.
create
())
.
addConverterFactory
(
GsonConverterFactory
.
create
())
.
build
()
githubService
=
retrofit
.
create
(
GithubService
::
class
.
java
)
AopTest
().
test
()
...
...
@@ -343,11 +344,12 @@ class MainDebugActivity : BaseActivity(), View.OnClickListener {
//requestByGet("https://gank.io/api/today?a=哈哈&b=bb");
requestByGet
(
"https://www.v2ex.com/api/topics/hot.json"
)
R
.
id
.
btn_retrofit_mock
->
{
val
githubUserInfo
=
githubService
?.
githubUserInfo
(
"jtsky"
)
githubUserInfo
?.
subscribeOn
(
Schedulers
.
io
())
?.
subscribe
{
Log
.
i
(
TAG
,
"githubUserInfo===>${it.login}"
)
}
githubService
?.
githubUserInfo
(
"jtsky"
)
?.
subscribeOn
(
Schedulers
.
io
())
?.
subscribe
(
{
Log
.
i
(
TAG
,
"githubUserInfo===>${it.login}"
)
},
{
Log
.
e
(
TAG
,
"Request failed by retrofit mock"
,
it
)
}
)
}
R
.
id
.
btn_test_crash
->
testCrash
()
!!
.
length
R
.
id
.
btn_show_hide_icon
->
if
(
DoraemonKit
.
isShow
)
{
...
...
Android/java/app/src/main/java/com/didichuxing/doraemondemo/retrofit/GithubService.kt
浏览文件 @
91e8a5f5
package
com.didichuxing.doraemondemo.retrofit
import
io.reactivex.Observable
import
retrofit2.Call
import
retrofit2.http.GET
import
retrofit2.http.Path
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/core/DefaultResponseHandler.java
浏览文件 @
91e8a5f5
...
...
@@ -29,7 +29,7 @@ public class DefaultResponseHandler implements ResponseHandler {
@Override
public
void
onEOF
(
ByteArrayOutputStream
outputStream
)
{
mNetworkInterpreter
.
responseReadFinished
(
mRequestId
,
mRecord
,
outputStream
);
mNetworkInterpreter
.
responseReadFinished
(
mRequestId
,
mRecord
,
outputStream
);
}
@Override
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/core/NetworkInterpreter.java
浏览文件 @
91e8a5f5
package
com.didichuxing.doraemonkit.kit.network.core
;
import
androidx.annotation.Nullable
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
androidx.annotation.Nullable
;
import
com.didichuxing.doraemonkit.kit.network.NetworkManager
;
import
com.didichuxing.doraemonkit.kit.network.bean.NetworkRecord
;
...
...
@@ -21,10 +21,20 @@ import java.util.concurrent.atomic.AtomicInteger;
* @desc: 网络请求解析类
*/
public
class
NetworkInterpreter
{
private
static
class
Holder
{
private
static
NetworkInterpreter
INSTANCE
=
new
NetworkInterpreter
();
}
public
static
final
String
TAG
=
"NetworkInterpreter"
;
private
final
AtomicInteger
mNextRequestId
=
new
AtomicInteger
(
0
);
private
ResourceTypeHelper
mResourceTypeHelper
;
public
static
NetworkInterpreter
get
()
{
return
NetworkInterpreter
.
Holder
.
INSTANCE
;
}
public
void
httpExchangeFailed
(
int
requestId
,
String
s
)
{
//LogHelper.i(TAG, "[httpExchangeFailed] requestId: " + requestId + " error: " + s);
}
...
...
@@ -39,20 +49,10 @@ public class NetworkInterpreter {
}
}
public
void
responseReadFailed
(
int
requestId
,
String
s
)
{
LogHelper
.
i
(
TAG
,
"[responseReadFailed] requestId: "
+
requestId
+
" error: "
+
s
);
}
private
static
class
Holder
{
private
static
NetworkInterpreter
INSTANCE
=
new
NetworkInterpreter
();
}
public
static
NetworkInterpreter
get
()
{
return
NetworkInterpreter
.
Holder
.
INSTANCE
;
}
public
int
nextRequestId
()
{
return
mNextRequestId
.
getAndIncrement
();
}
...
...
@@ -60,25 +60,22 @@ public class NetworkInterpreter {
public
InputStream
interpretResponseStream
(
String
contentType
,
@Nullable
InputStream
availableInputStream
,
ResponseHandler
responseHandler
)
{
ResponseHandler
responseHandler
)
{
if
(
availableInputStream
==
null
)
{
responseHandler
.
onEOF
(
null
);
return
null
;
}
ResourceType
resourceType
=
contentType
!=
null
?
getResourceTypeHelper
().
determineResourceType
(
contentType
)
:
null
;
ResourceType
resourceType
=
contentType
!=
null
?
getResourceTypeHelper
().
determineResourceType
(
contentType
)
:
null
;
if
(
resourceType
!=
ResourceType
.
DOCUMENT
&&
resourceType
!=
ResourceType
.
XHR
)
{
responseHandler
.
onEOF
(
null
);
return
availableInputStream
;
}
return
new
InputStreamProxy
(
availableInputStream
,
responseHandler
);
return
new
InputStreamProxy
(
availableInputStream
,
responseHandler
);
}
public
NetworkRecord
createRecord
(
int
requestId
,
NetworkInterpreter
.
InspectorRequest
request
)
{
NetworkRecord
record
=
new
NetworkRecord
();
record
.
mRequestId
=
requestId
;
...
...
@@ -117,10 +114,8 @@ public class NetworkInterpreter {
record
.
responseLength
=
body
.
getBytes
().
length
;
record
.
mResponseBody
=
body
;
}
}
public
void
fetchResponseInfo
(
NetworkRecord
record
,
NetworkInterpreter
.
InspectorResponse
response
)
{
Response
responseJSON
=
new
Response
();
responseJSON
.
url
=
response
.
url
();
...
...
@@ -156,8 +151,7 @@ public class NetworkInterpreter {
return
builder
.
toString
();
}
private
String
readBodyAsString
(
NetworkInterpreter
.
InspectorRequest
request
)
{
private
String
readBodyAsString
(
NetworkInterpreter
.
InspectorRequest
request
)
{
try
{
byte
[]
body
=
request
.
body
();
if
(
body
!=
null
)
{
...
...
@@ -168,8 +162,7 @@ public class NetworkInterpreter {
return
null
;
}
private
String
readBodyAsString
(
byte
[]
body
)
{
private
String
readBodyAsString
(
byte
[]
body
)
{
try
{
if
(
body
!=
null
)
{
return
new
String
(
body
,
Utf8Charset
.
INSTANCE
);
...
...
@@ -179,8 +172,7 @@ public class NetworkInterpreter {
return
null
;
}
private
long
readBodyLength
(
NetworkInterpreter
.
InspectorRequest
request
)
{
private
long
readBodyLength
(
NetworkInterpreter
.
InspectorRequest
request
)
{
try
{
byte
[]
body
=
request
.
body
();
if
(
body
!=
null
)
{
...
...
@@ -191,8 +183,7 @@ public class NetworkInterpreter {
return
0
;
}
private
long
readBodyLength
(
byte
[]
body
)
{
private
long
readBodyLength
(
byte
[]
body
)
{
try
{
if
(
body
!=
null
)
{
return
body
.
length
;
...
...
@@ -237,7 +228,6 @@ public class NetworkInterpreter {
String
url
();
}
public
interface
InspectorRequestCommon
extends
InspectorHeaders
{
/**
* Unique identifier for this request. This identifier must be used in all other network
...
...
@@ -245,7 +235,6 @@ public class NetworkInterpreter {
* WebSockets that have exhuasted the state machine to its final closed/finished state.
*/
int
id
();
}
public
interface
InspectorResponseCommon
extends
InspectorHeaders
{
...
...
@@ -255,7 +244,6 @@ public class NetworkInterpreter {
int
requestId
();
int
statusCode
();
}
public
interface
InspectorHeaders
{
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/okhttp/interceptor/DoraemonInterceptor.java
浏览文件 @
91e8a5f5
package
com.didichuxing.doraemonkit.kit.network.okhttp.interceptor
;
import
android.text.TextUtils
;
import
androidx.annotation.NonNull
;
import
com.didichuxing.doraemonkit.constant.DokitConstant
;
import
com.didichuxing.doraemonkit.kit.network.NetworkManager
;
import
com.didichuxing.doraemonkit.kit.network.bean.NetworkRecord
;
...
...
@@ -10,16 +11,13 @@ import com.didichuxing.doraemonkit.kit.network.bean.WhiteHostBean;
import
com.didichuxing.doraemonkit.kit.network.core.DefaultResponseHandler
;
import
com.didichuxing.doraemonkit.kit.network.core.NetworkInterpreter
;
import
com.didichuxing.doraemonkit.kit.network.core.RequestBodyHelper
;
import
com.didichuxing.doraemonkit.kit.network.core.ResourceType
;
import
com.didichuxing.doraemonkit.kit.network.core.ResourceTypeHelper
;
import
com.didichuxing.doraemonkit.kit.network.okhttp.ForwardingResponseBody
;
import
com.didichuxing.doraemonkit.kit.network.okhttp.InterceptorUtil
;
import
com.didichuxing.doraemonkit.kit.network.okhttp.OkHttpInspectorRequest
;
import
com.didichuxing.doraemonkit.kit.network.okhttp.OkHttpInspectorResponse
;
import
com.didichuxing.doraemonkit.kit.network.utils.OkHttpResponseKt
;
import
com.didichuxing.doraemonkit.util.LogHelper
;
import
org.jetbrains.annotations.NotNull
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.List
;
...
...
@@ -39,9 +37,9 @@ public class DoraemonInterceptor implements Interceptor {
private
final
NetworkInterpreter
mNetworkInterpreter
=
NetworkInterpreter
.
get
();
@No
t
Null
@No
n
Null
@Override
public
Response
intercept
(
Chain
chain
)
throws
IOException
{
public
Response
intercept
(
@NonNull
Chain
chain
)
throws
IOException
{
if
(!
NetworkManager
.
isActive
())
{
Request
request
=
chain
.
request
();
try
{
...
...
@@ -110,6 +108,9 @@ public class DoraemonInterceptor implements Interceptor {
contentType
!=
null
?
contentType
.
toString
()
:
null
,
responseStream
,
new
DefaultResponseHandler
(
mNetworkInterpreter
,
requestId
,
record
));
record
.
mResponseBody
=
OkHttpResponseKt
.
bodyContent
(
response
);
LogHelper
.
d
(
"http-monitor"
,
"response body >>>\n"
+
record
.
mResponseBody
);
if
(
responseStream
!=
null
)
{
response
=
response
.
newBuilder
()
.
body
(
new
ForwardingResponseBody
(
body
,
responseStream
))
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/utils/OkHttpResponse.kt
0 → 100644
浏览文件 @
91e8a5f5
@
file
:
RestrictTo
(
RestrictTo
.
Scope
.
LIBRARY
)
package
com.didichuxing.doraemonkit.kit.network.utils
import
androidx.annotation.RestrictTo
import
okhttp3.Response
import
okio.Buffer
import
okio.GzipSource
import
java.nio.charset.Charset
internal
fun
Response
.
encoding
()
=
this
.
header
(
"content-encoding"
)
?:
this
.
header
(
"Content-Encoding"
)
internal
fun
Response
.
charset
():
Charset
{
this
.
encoding
()
?.
takeIf
{
Charset
.
isSupported
(
it
)
}
?.
also
{
return
Charset
.
forName
(
it
)
}
return
body
()
?.
contentType
()
?.
charset
()
?:
Charset
.
defaultCharset
()
}
internal
fun
Response
.
bodyContent
():
String
=
body
()
?.
let
{
body
->
val
source
=
body
.
source
()
.
apply
{
request
(
Long
.
MAX_VALUE
)
}
var
buffer
=
source
.
buffer
val
encoding
=
encoding
()
if
(
"gzip"
.
equals
(
encoding
,
true
))
{
GzipSource
(
buffer
.
clone
()).
use
{
gzippedBody
->
buffer
=
Buffer
().
also
{
it
.
writeAll
(
gzippedBody
)
}
}
}
buffer
}
?.
clone
()
?.
readString
(
charset
())
?:
""
Android/java/gradle.properties
浏览文件 @
91e8a5f5
...
...
@@ -16,6 +16,9 @@ android.debug.obsoleteApi=true
android.useAndroidX
=
true
android.enableJetifier
=
true
android.injected.testOnly
=
false
kotlin.code.style
=
official
#dokit全局配置
#dokit 慢函数开关
DOKIT_METHOD_SWITCH
=
true
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录