lingochamp / FileDownloader

Multitask、MultiThread(MultiConnection)、Breakpoint-resume、High-concurrency、Simple to use、Single/NotSingle-process
Apache License 2.0
11.03k stars 2.2k forks source link

下载报错java.net.ProtocolException: unexpected end of stream排除服务器端问题 #1327

Open zhiyong926 opened 4 years ago

zhiyong926 commented 4 years ago

关于这个问题,前面已经看过类似提出以及网上更多的解决办法: https://blog.csdn.net/lyabc123456/article/details/87368161 https://github.com/lingochamp/FileDownloader/issues/1059 https://stackoverflow.com/questions/45838774/java-io-ioexception-unexpected-end-of-stream-on-connection-in-android# 大神最终分析初步结论为:此问题要想解决必须在服务器端修正响应头中的Content-Length字段,Content-Length必须严格等于响应正文【按照响应头中返回的charset编码】的字节数,或者不用Content-Length字段(如使用Transfer-Encoding:chunked)。 为此,我专门给我的服务器提供商阿里云提交工单,和其来回沟通多日,最终通过我的1台安卓自带模拟器复现,并用wireshark抓包,分析结果如下: https://workorder.console.aliyun.com/attach/note_attach.do?spm=5176.2020520129.105.5.14bruf&id=74912426&order=0

https://workorder.console.aliyun.com/attach/note_attach.do?spm=5176.2020520129.105.5.14bruf&id=74912426&order=1 阿里云工程师回复:客户端请求的range长度 和返回的 content length是匹配的 没有异常,但是如果okhttp兼容性不够好 实际返回的body大小和length不一致就会抛出异常的话 ,建议查看okhttp源码 看下这块异常判断的逻辑能否跳过。 我是小白,仅供大神参考,并且可以极力拿我当前的这台复现的模拟器进行配合测试,我的Email:20066442@qq.com

qyzhaojinxi commented 4 years ago

我看开发者回复在其他帖子里也说可以忽略跳过这个问题,但需要判断temp文件是否完好,这个不太清楚怎么处理

MirkoWu commented 4 years ago

@zhiyong926 我也遇到这个问题,请问你解决这个问题了吗?我这边文件也是在阿里云服务器的,下载失败不一定是必现,但在某些机型上概率很高。

RocZhengPeng commented 4 years ago

我的华为p20,也会出现这种情况

hepingdev commented 2 years ago

这问题困扰已久啊,怎么解决呀