服務端驗證碼解決方法。
在服務端生成驗證碼后會把驗證碼字符串存在服務端的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);