Android 解决服务端验证码问题

本文介绍了一种服务端验证码处理的方法,包括如何通过Cookie保存和服务端Session交互验证验证码,以及使用Java实现的具体步骤。

服务端验证码解决方法。

  在服务端生成验证码后会把验证码字符串存在服务端的session中,等待用户提交进行比对。为了保证服务器与客户端的一对一的关系,所以出现了session 和cookie技术。客户端的cookie 存放的是服务端session 的key值。

(1)在取得服务端验证码图片时,同时取得Cookie,从Cookie中取得JSESSIONID(服务端是用java开发)的值,将其放到一个全局静态变量中。

(2)提交内容时一起把JSESSIONID的值传过去。

(3)如果服务器端提示验证码错误时,就在此线程中再开辟一个线程重新获取验证码图片。

 

从服务端取得图片:

HttpGet get=new HttpGet("http://www.qd-n-tax.gov.cn/sst/getVCI");
DefaultHttpClient client=new DefaultHttpClient(); 
HttpResponse response=client.execute(get);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
        HttpEntity entity=response.getEntity();
        InputStream is=entity.getContent();
        bitmap=BitmapFactory.decodeStream(is);
        is.close();
}

从服务端取得cookie:

//得到服务端Cookie
List<Cookie>cookies=client.getCookieStore().getCookies();
    for(int i=0;i<cookies.size();i++){
       //取得Cookie['JSESSIONID']的值存在静态变量中
        if("JSESSIONID".equals(cookies.get(i).getName())){
                TsjbActivity.JSESSIONID=cookies.get(i).getValue();
                break;
        }
}

将session id返回个服务器,保证服务器与客户端一对一:

HttpPost post=new HttpPost(path);
post.setEntity(new UrlEncodedFormEntity(list,HTTP.UTF_8));
if(null!=TsjbActivity.JSESSIONID){
//为了与服务端的session交互,将SESSIONID发给服务器
post.setHeader("Cookie", "JSESSIONID="+TsjbActivity.JSESSIONID);
}
HttpResponse response=new DefaultHttpClient().execute(post);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值