上一篇blog中提到了一个超级奇葩的API;
没有文档,
示例代码是错的(带额外的params=),
系统log的含义是错的。
https://blog.csdn.net/guotch/article/details/95308055
今天这个API再次发现一个奇葩bug
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// 获取URLConnection对象对应的输出流
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));// 发送http请求
// 循环读取流
while ((line = reader.readLine()) != null) {
json_read = line;// "\n"
这段代码 使劲报错com.alibaba.fastjson.JSONException: not close json text, token 大致的意思就是JSON parse解析失败。
把失败的字符串打印出来,大致是形如:{"result":"abc"}{"result":"abc"},也就是说,我预期得到一个json但实际给我返回了2遍。
为了排查这个故障,我翻来覆去查自己的代码,最后实在找不到,去tcpdump了一把,结果发现,HTTP接口本身返回的数据也是对的,这下子我傻了。
POST XXX HTTP/1.1
accept: */*
Content-Type: application/x-www-form-urlencoded
User-Agent: Java/1.8.0_112
Host: XXX
Connection: keep-alive
HTTP/1.1 200 OK
Server: Tengine
Date: Wed, 17 Jul 2019 07:57:43 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
3e8
{"success":true,"message":null}
0
最后,我把上面这段代码中的line给logger了出来。这下我们知道原因了,大概有5%的概率,这个接口返回的数据会有2行一摸一样的line!且并非特定prefix,而是随机返回。
于是我把result直接等于了line
史上最奇葩API