上班记录

上班第一天

给的需求是:

1.用Java程序,通过账号密码登陆 移动物联网后台,实现模拟登陆----->获得cookies信息。

难点:1.1密码在登陆前通过RSA算法加密(加密的公钥是后台动态传过来不断改变)

~$1.1:通过浏览时network可以发现rsa.js的加密文件。在java中通过构造js运行引擎,运行js代码。rsa.js需要两个参数进行加密,moudle和message不断变化。解决方法为将整个首页信息下载下来,解析字符串获得moudle和message。

           1.2获得验证码

~$1.2:暂时决定引入第三方收费api验证码识别。

           1.3模拟浏览器发送AJAX的post请求附带json参数

使用postman熟悉模拟请求的参数和过程,为明天编码做好准备

 

上班第二天:推土机,把昨天的动态获得公钥和密码放弃。

新的方案:采用selenium+phantomjs。

通过selenium模拟用户打开网站的过程,同时采用phantomjs将界面隐藏。

即:自动化打开浏览器,输入设置好的账号密码,输入通过聚合api识别的验证码,点击登录,记录cookies。

2.拿着cookies去访问接口,获得已激活sim卡用户的信息。

通过httpclient模拟访问接口的过程。因为获得的数据量比较大需要先获得总条数,遍历页数(页数=总条数/每次取几条)

将获得的cookie通过StringBuff传出。

2.1通过json包装分页信息

构造page和row两个类通过JSONObject.fromObject构造分页的json

 

上班第三天:

在实现基本功能的前提下:这个登录的函数属于并发,所以又要对整个过程进行分析

首先:selenium的驱动webDriver属于在内存中开辟的一块空间,每有一个并发出现将申请一个webDriver。假设并发足够高,服务器内存将被消耗完,导致宕机。

解决方案:模仿线程池的方法,引入一个驱动池。通过双重检测的单例方法构造出pool实例,申请n个驱动,长时间维护这些驱动,解决驱动开启的时间过长以及内存消耗问题。

 其次:当并发请求发送过来时,可能会出现pool中的驱动全部都在使用中,此时拿不到driver,这个请求将无效。由于这个请求需要及时返回查询。大量尝试后得出方法:将并发请求的信息,转发到中转函数,中转函数维护一个queue。queue将并发请求的信息放入其中,1.当驱动空闲时,从queue中不断取出并发信息去执行查询2.查询失败时,将并发信息重新入队。3.当pool中没有空闲驱动时,入队。pool中,用的是线程安全的stack很傻逼,打算换成阻塞队列

 

第四天:

很傻逼,忘了改阻塞队列。

将代码重构了一下。。。

免费api机会用完了也没得测试了

提交上去了,还没执行单元测试,肯定bug一堆,今天没事干。到处摸鱼

你可能感兴趣的:(上班日记)