gzip android,android – 在膨胀gzip HTTP响应主体时“过早耗尽源”

当我尝试使用okhttp进行HTTP调用时,我收到以下错误:

W/System.err: java.io.EOFException: source exhausted prematurely

W/System.err: at okio.InflaterSource.read(InflaterSource.java:83)

W/System.err: at okio.GzipSource.read(GzipSource.java:80)

W/System.err: at okio.Buffer.writeAll(Buffer.java:1135)

W/System.err: at okio.RealBufferedSource.readString(RealBufferedSource.java:199)

W/System.err: at okhttp3.ResponseBody.string(ResponseBody.java:176)

W/System.err: at com.ethanwang.andplay.OKHttpTaskTag.doInBackground(OKHttpTaskTag.java:41)

W/System.err: at com.ethanwang.andplay.OKHttpTaskTag.doInBackground(OKHttpTaskTag.java:20)

W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:295)

W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)

W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)

W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)

W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)

W/System.err: at java.lang.Thread.run(Thread.java:818)

我只能找到这个相关的问题:https://github.com/square/okhttp/issues/2193,但我已确保Content-Length是响应正文的正确长度.这是我记录的okhttp请求和响应:

请求:

I/System.out: INFO: Sending request http://test.essaybot.com/msg/tag_search on Connection{test.essaybot.com:80,proxy=DIRECT@ hostAddress=test.essaybot.com/34.208.145.50:80 cipherSuite=none protocol=http/1.1}

I/System.out: Content-Type: application/x-www-form-urlencoded

I/System.out: Content-Length: 33

I/System.out: Host: test.essaybot.com

I/System.out: Connection: Keep-Alive

I/System.out: Accept-Encoding: gzip

I/System.out: User-Agent: okhttp/3.11.0

响应:

I/System.out: INFO: Received response for http://test.essaybot.com/msg/tag_search in 62.2ms

I/System.out: Cache-Control: no-cache

I/System.out: Content-Encoding: gzip

I/System.out: Content-Length: 139

I/System.out: Content-Type: application/json

I/System.out: Set-Cookie: PHP_SESSION=0Q4rZJplDjrUNB4ZbWAG; Path=/; Max-Age=2592000

I/System.out: Set-Cookie: VISITOR_ID=65xGr53M1xM0waK8; Path=/; Max-Age=31536000

I/System.out: Date: Wed,29 Aug 2018 20:45:06 GMT

I/System.out: INFO: Received response body bytes:

I/System.out: [31,-117,8,-1,44,-51,65,10,-62,64,12,5,-48,-85,72,-42,93,-72,-18,-50,-91,103,16,-111,-23,52,-83,31,66,-90,100,50,-94,-120,119,-105,116,-70,9,47,-16,-109,37,54,123,104,-95,-15,60,-112,113,109,-30,-34,-24,-65,88,-67,25,-45,70,97,30,115,49,-28,20,-128,-108,107,80,-33,96,-12,22,36,57,-43,89,4,43,-74,61,58,-49,-56,-114,-31,86,-35,-110,-32,-8,-81,101,-44,99,92,-98,69,21,-119,63,-1]

I/System.out: With length: 139

服务器与我们的Web和iOS端完美配合.直到大约两个月前,当它突然停止工作而没有网络变化时,它也能很好地与android配合使用.还有什么可能导致此错误?

– – – – – – – – – – – – – – – – – – – 更新 – – – – – – —————————

看起来缓冲区中的数据是可读的,因为从上面的调试器中可以看到可读文本([size = 185 text = {“err_no”:0,“result”:[“Adventure”,“Advice”,“Art”,“非洲“,”Airli …])在缓冲变量之后注释.此外,来自调试器的数据与记录的数据不同:

data = {byte[8192]@4418}

0 = 123

1 = 34

2 = 101

3 = 114

4 = 114

5 = 95

6 = 110

7 = 111

8 = 34

9 = 58

10 = 48

11 = 44

12 = 34

13 = 114

14 = 101

15 = 115

16 = 117

17 = 108

18 = 116

19 = 34

20 = 58

21 = 91

22 = 34

23 = 65

24 = 100

25 = 118

26 = 101

27 = 110

28 = 116

29 = 117

30 = 114

31 = 101

32 = 34

33 = 44

34 = 34

35 = 65

36 = 100

37 = 118

38 = 105

39 = 99

40 = 101

41 = 34

42 = 44

43 = 34

44 = 65

45 = 114

46 = 116

47 = 34

48 = 44

49 = 34

50 = 65

51 = 102

52 = 114

53 = 105

54 = 99

55 = 97

56 = 34

57 = 44

58 = 34

59 = 65

60 = 105

61 = 114

62 = 108

63 = 105

64 = 110

65 = 101

66 = 115

67 = 34

68 = 44

69 = 34

70 = 65

71 = 110

72 = 120

73 = 105

74 = 101

75 = 116

76 = 121

77 = 34

78 = 44

79 = 34

80 = 65

81 = 114

82 = 116

83 = 105

84 = 102

85 = 105

86 = 99

87 = 105

88 = 97

89 = 108

90 = 32

91 = 73

92 = 110

93 = 116

94 = 101

95 = 108

96 = 108

97 = 105

98 = 103

99 = 101

100 = 110

101 = 99

102 = 101

103 = 34

104 = 44

105 = 34

106 = 65

107 = 112

108 = 112

109 = 115

110 = 34

111 = 44

112 = 34

113 = 65

114 = 100

115 = 100

116 = 105

117 = 99

118 = 116

119 = 105

120 = 111

121 = 110

122 = 34

123 = 44

124 = 34

125 = 65

126 = 117

127 = 115

128 = 116

129 = 114

130 = 97

131 = 108

132 = 105

133 = 97

134 = 34

135 = 44

136 = 34

137 = 65

138 = 105

139 = 114

140 = 98

141 = 110

142 = 98

143 = 34

144 = 44

145 = 34

146 = 65

147 = 103

148 = 105

149 = 110

150 = 103

151 = 34

152 = 44

153 = 34

154 = 65

155 = 100

156 = 118

157 = 101

158 = 114

159 = 116

160 = 105

161 = 115

162 = 105

163 = 110

164 = 103

165 = 34

166 = 44

167 = 34

168 = 65

169 = 108

170 = 99

171 = 111

172 = 104

173 = 111

174 = 108

175 = 34

176 = 44

177 = 34

178 = 65

179 = 115

180 = 105

181 = 97

182 = 34

183 = 93

184 = 125

185 = 0

186 = 0

187 = 0

188 = 0

189 = 0

190 = 0

191 = 0

192 = 0

193 = 0

194 = 0

195 = 0

196 = 0

197 = 0

198 = 0

199 = 0

———————–更新————————

我使用调试器来跟踪问题,似乎gzipped响应被解压缩了两次.如附图所示,在InflaterSource.java中读取两次.在第二次解压缩时抛出异常.

5414ada51450c482b56a29283cd3effe.png

第一次读取被调用

5414ada51450c482b56a29283cd3effe.png

第二次调用read时,抛出异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值