`
jsnjlc
  • 浏览: 50039 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HttpURLConnection取不得参数的原因分析

阅读更多

项目由3个系统组成:1台服务器里装的weblogic8.1,里面是AP,1台服务器是装的tomcat,里面有处理程序和文件服务2个系统。只有AP能够连接数据库。

项目中要用到下载和上传。

上传通过Flex上传到文件服务器后,由处理的系统进行处理,然后AP去处理的系统里面抓数据,由AP记录进数据库,再返回给用户。此地方用的HttpURLConnection进行的连接抓取数据,没有问题。

下载通过AP查询数据库,进行参数整合处理,将参数发送到处理系统,由处理系统在文件服务中寻找需要的资料,然后进行打包处理,再将下载路径返回给AP。此地方用的HttpURLConnection进行连接和发送数据,出现问题。。。

情况分析:

在本地做AP连接正式环境,没有问题,可以下载和传递数据。但是正式环境的AP却没有办法。。。

正式的AP和文件服务器不在同一个机房,属于跨域操作,之间有防火墙阻隔,由于在本地测试没有问题,说明是正式环境的AP的防火墙设置有问题。但是由于不能修改防火墙配置,只能另寻办法。

虽然用了2次HttpURLConnection,但是方法不一样,一次是用POST方法但是将参数直接放在链接后的,可以取到。而出现问题的是用POST方法但是是将参数写入流中的。由于参数较多,而且参数间有层级关系,因此使用原始的参数&参数的方式放在URL后面不实际,而且判断会有很多问题。而且参数长度有可能会使字符串的长度达到2W。。。

HttpURLConnection的实质其实是创建Socket连接,但是其创建的是随机端口,而机房设置是只开放了80等常用端口,其他端口全部封死,因此,写入流中的参数在文件服务器那无法抓取到。

解决办法:

使用JSON将所需要的参数进行对象封装,然后连接到URL后面,仍然使用POST方法,就可以传递到文件服务器上。处理参数的时候,也改成JSON的处理方式,这样,逻辑清楚,也方便控制。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics