• Android 解决服务端验证码问题


    服务端验证码解决方法。

      在服务端生成验证码后会把验证码字符串存在服务端的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);
  • 相关阅读:
    Microsoft Internet Explorer 多个不明细节远程代码执行漏洞
    给妈妈写程序
    平安夜,100篇
    我的DV,Sony HC90E
    听相声
    嘉陵江的石头,也许吧
    一步一个脚印-产品升级随笔(3)-学会拍板
    一步一个脚印-产品升级随笔(1)-vision
    《网站重构》网络资源总结
    一步一个脚印-产品升级随笔(2)-为什么需要BS架构的产品
  • 原文地址:https://www.cnblogs.com/yshyee/p/3373403.html
Copyright © 2020-2023  润新知