史上最奇葩API之一

上一篇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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值