笔者最近在项目中遇到了用HttpURLConnection请求第三方接口,但返回值始终为空的问题。项目中几个大拿费了好长时间,才找到了问题的原因,原来是BufferedReader的readline方法被错误执行了两次导致的。结果虽然很简单,但找原因颇费了一番功夫。现在分享一下。
(1)问题的现象
HttpURLConnection请求第三方接口,但返回值始终为空
(2)问题可能原因
第一,第三方接口有问题。不能正确处理请求。
第二,项目用的框架存在问题,请求对第三方接口或者第三方接口返回的内容被屏蔽了。
第三,项目本身代码的问题。
(3)排除方法
第一,首先排除接口的问题,因为通过chrome的一些插件如Advanced rest client调用第三方接口,能正常返回结果。
第二,排除了项目框架的问题。因为不用项目框架,单独写个main方法,将项目中的代码粘过来,进行调用还是得不到结果。
第三,项目本身代码的问题。前两者都不是,那么一定就是代码的原因了。但是开发环境无法连接第三方接口,只有客户的运行环境中才能连接。那如何定位呢?最后灵光一闪,还是直接访问一个web页面吧。于是将url修改了一下,进行了debug。发现HttpURLConnection请求有应答。奇了怪了。可是再细心一看,应答内容和web页面内容又有所不同,应答内容明显变少了。这样问题就很快能定位了,一定是解析请求结果出了问题。原来在循环中br.readLine被执行了多次。
while (bf.readLine() != null) {