编码是gzip trunked的response body怎么解析
Gzip的用GzipInputStream,chunked解析要用第三方库(可以github找ChunkedInputStream)或者自己写
override fun onResponseInject(response: HttpResponse, body: HttpBody, callback: InjectorCallback)
我是直接解析这个body的,但是好像netbare获取的数据不完整,body的结尾不是chuncked编码格式的,结尾不是0和\r\n\r\n

在这里我可以打印出所有的包,但是到这里之后就只有一个chuncked,

分离head和body用\r\n\r\n,好像会把最后一个chunked的结束标志给弄没了
如果body很大,一次回调可能不会给出完整的body,而是多次回调。
如何进多次回调
如果body很大,一次回调可能不会给出完整的body,而是多次回调。
请问需要修改netbare-core里的源码吗
不需要
gzip chunked能注入吗?没办法单独解压一个包啊,还是等接收到所有包后再发?
我也遇到了和你一样的问题,后来我发现直接在onRequestInject()里面加一个"Accept-Encoding":"None" 头就行了。
override fun onRequestInject(header: HttpRequestHeaderPart, callback: InjectorCallback) {
val newHeader = header.newBuilder().replaceHeader("Accept-Encoding", "None").build()
callback.onFinished(newHeader)
}
这样出来的数据就是明文数据,然后处理一下chunked就好了。 希望能帮到你。
非常感谢,我现在是接收到所有包合并后解压gzip,但是不知道要怎么把数据再返回给客户端。我看了httpcanary的处理gzip,chunked的方法好像是收到所有包后直接返回一个包含全部数据的包。 如果修改请求头的话,那我修改了返回数据,直接返回明文数据给客户端吗?
非常感谢,我现在是接收到所有包合并后解压gzip,但是不知道要怎么把数据再返回给客户端。我看了httpcanary的处理gzip,chunked的方法好像是收到所有包后直接返回一个包含全部数据的包。 如果修改请求头的话,那我修改了返回数据,直接返回明文数据给客户端吗?
可以的,如果直接返回明文,要记得response的header也要改一下"Accept-Encoding":"None"
@Ezreal147 我也遇到了将所有chunked包合并后解压gzip,修改数据后重新gzip压缩返回给客户端,客户端展示不出的问题。你这边有解决方案了吗?而且很奇怪,同样的代码,https+gzip能展示;http+gzip+chunked也能展示;只有https+gzip+chunked不能展示
已經在request的header中設置了 accept-encoding:"none" 了 服務端返回的數據已經是明文了 但是 爲什麽body 打印出來的不全 ,上面説的多次回調我要怎麽才能接到多次回調的body
我也遇到了gzip解码的问题,直接转成字符串会乱码,也尝试过解码gzip的方法,但是由于可能会包不完整,所以解码会失败,合并包感觉太麻烦 所以我是直接去掉了请求头中的Accept-Encoding
@Override
public void onRequestInject(@NonNull HttpRequestHeaderPart header, @NonNull InjectorCallback callback) throws IOException {
// 当sniffRequest返回true时,会走到此方法。
// 对请求头部进行注入,包括method、url、headers都可以修改
LogHelper.log("注入请求头:");
LogHelper.log(new String(header.toBuffer().array()));
LogHelper.log("移除Accept-Encoding");
header.headers().remove("Accept-Encoding");
LogHelper.log(new String(header.toBuffer().array()));
// 注入完成后将新的数据发出去
callback.onFinished(header);
}