摘要
开发的系统要去调用一个第三方系统的功能,通过http协议调用,在本地测试环境跑正常,提交版本到测试环境,刚开始运行正常,后面过了一端时间,偶尔出现503,以为是对方的服务问题,通过postman测试正常,下面就是排查问题了。
尝试
在网络浏览了各路大神的问题和解决办法:
- 请求头设置各种参数,—无效
- 各种输入输出流切换,—无效
- getInputStream和getInputError区别,有可能返回只是getInputStream获取不到,—无效
- 切换http请求类,URLConnect~HttpClient,—无效
。。。。
发现问题
代理问题
发现测试在执行了同事开发的另一个功能,去TX下载图片的功能之后就会出现问题,查看调用TX的API代码发现,
System.setProperty("Property1", "xxx");
//设置成为系统级的代理~
实际问题是去TX要走代理到外网,我的系统和对方的系统都是在内网网段安全区内的,完全没必要到代理去,代理服务器也没有开通访问对方服务器的网络,至此,问题找到了。
解决问题
当然是修改全局代理的问题了,JAVA的动态代理类(Proxy)
//TODO
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));
URLConnection conn = url.openConnection(proxy);
心得
- 解决问题须先找到问题所在
- 结合实际情况,前人经验可以借鉴,不能套用
- 多学习,多总结