webview 模拟登陆

好像网上很多这个资料,不过全一点的还是stackoverflow上的一个回答,可能不同后台的实际情况也有点不同,权当作是做一个笔记好了:


private class CookieTask extends AsyncTask<Boolean, Boolean, Boolean>{
	@Override
	protected void onPreExecute(){
		CookieSyncManager.createInstance(Activity.this);
		CookieSyncManager.getInstance().startSync();
	}
	
	@Override
	protected Boolean doInBackground(Boolean... params) {
		try{
			String cookie = doGetCookie();
		}catch(Exception e){
			return false;
		}
		if(cookie != null && cookie.length() > 0){
			android.webkit.CookieManager cookieManager = 
				android.webkit.CookieManager.getInstance();
			cookieManager.setAcceptCookie(true);
			cookieManager.setCookie(getDefaultURL(), cookie);
			CookieSyncManager.getInstance().sync();
		}else{
			return false;
		}
		return true;
	}
	
	private String doGetCookie() throws Exception{
		StringBuilder builder = new StringBuilder();
		builder.append("n=").append("account");
		builder.append("&p=").append("password");
		byte[] data = builder.toString().getBytes("UTF-8");
		URL url=new URL(urlstr);
		HttpURLConnection connection = 
			(HttpURLConnection) url.openConnection();
		try{
			connection.setDoOutput(true);
			connection.setRequestProperty("Content-Type", 
				"application/x-www-form-urlencoded");
			connection.setRequestProperty("Content-Length", 
				Integer.toString(data.length));
			connection.setRequestMethod("POST");
			connection.setInstanceFollowRedirects(false); 
			OutputStream os = connection.getOutputStream();
			os.write(data);
			os.close();
			int aRstCode=connection.getResponseCode();
			if (aRstCode == HttpURLConnection.HTTP_OK){
				cookie = connection.getHeaderField("Set-Cookie");
			}
		}catch(Exception e){
			throw e;
		}finally{
			if(connection != null){
				connection.disconnect();				
			}
		}
		return cookie;
	}
	
	@Override
	protected void onPostExecute(Boolean isSccuess){
		super.onPostExecute(isSccuess);
		if(isSccuess){
			mWebView.loadUrl(getDefaultURL());
		}
	}
}

@Override
protected void onDestroy(){
	CookieSyncManager.createInstance(Activity.this);  
	android.webkit.CookieManager cookieManager = 
		android.webkit.CookieManager.getInstance(); 
	cookieManager.removeAllCookie();
	CookieSyncManager.getInstance().sync();
}


你可能感兴趣的:(android,cookie)