oauth 验证码登陆

oauth认证原理:本地存的不是用户密码,而是网站返回给的相当与该网站后门钥匙的密码

总结:httpclient

关于登陆时的验证码问题:其实就是网页的源码<input>节点上多了验证码的信息

jericho-html-3.1.jar  html的解析包 //访问的豆瓣是html网页
对html进行面向对象的封装.//Source是jar包中的一个类

  Source source  = new Source(response.getEntity().getContent());//response.getEntity().getContent()是输入流
	    System.out.println( source.toString());//得到的是具体(错误)信息

		
		抢票神器的原理:
		获取网站http节点信息,生成post请求,建立一个for循环,得到的不是所要的code就一直请求
		
	判断是否需要验证码:
传入网页url	开启url连接   解析html(jericho-html-3.1.jar Sourse类)   迭代找到对应节点的value
   例子: <img alt="请开启图片显示以获得验证码" src="/captcha/Wwlp6V4FsRJNcgVRuxy8hYdB/?size=m" /><br />
            <p>
            <span id="captcha_block">请输入上图中的单词</span>
            </p>
            <input type="text" name="captcha-solution" tabindex="3"/>
            <input type="hidden" name="captcha-id" value="Wwlp6V4FsRJNcgVRuxy8hYdB"/>

		
			/**
	 * 判断是否需要输入验证码 并返回验证码值
	 *这个过程相当于独立解析了html,和登陆与否没有直接联系
	 */
	public static String isNeedCaptcha(Context context) throws Exception{
		String loginurl = context.getResources().getString(R.string.loginurl);
		URL url = new URL(loginurl);
		
		 URLConnection  conn  = url.openConnection();
		 Source source = new Source(conn);
		 List<Element> elements = source.getAllElements("input");
		 for(Element element : elements){
			   String result = element.getAttributeValue("name");
			   if("captcha-id".equals(result)){
				   return element.getAttributeValue("value");
			   }
		 }
		 return null;
	}
	
	//验证码图片加载过程
	
	public static Bitmap getImage(String path) throws Exception{
		URL url = new URL(path);
		HttpURLConnection conn =  (HttpURLConnection) url.openConnection();
		InputStream is = conn.getInputStream();
		return  BitmapFactory.decodeStream(is);//直接转化为bitmap对象
	}
	
	
	
	String imagepath = getResources().getString(R.string.captchaurl)+result+"&size=s";//补全图片对应路径url
						Bitmap bitmap = NetUtil.getImage(imagepath);
						Message msg = new Message();
						msg.what=NEED_CAPTCHA;
						msg.obj = bitmap;//obj传递给handler
						handler.sendMessage(msg);
						
						
						
	case NEED_CAPTCHA:
		mCaptchaLinearLayout.setVisibility(View.VISIBLE);
		Bitmap bitmap = (Bitmap) msg.obj;
		mImageViewCaptcha.setImageBitmap(bitmap);
			break;
			
			
更换用户帐号:将本地保存的后门密码变更



new AsyncTask<Void, Void, Void>() {
	//onPreExecute 在异步任务执行之前调用的方法 
			// 运行在主线程里面的 
			// 初始化ui的操作
			@Override
			protected void onPreExecute() {
				showLoading();
				super.onPreExecute();
			}
			// onPostExecute 在异步任务(后台任务)执行之后调用的方法 
			// 运行在ui线程中 , 
			// 
			@Override
			protected void onPostExecute(Void result) {
			
			// doInBackground 后台执行的任务 
			// 方法运行在一个子线程当中 
			@Override
			protected Void doInBackground(Void... params) {
			// 执行耗时的操作 
			
			
			

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值