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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM