58同城自动登录。。分享给大家

http://bbs.csdn.net/topics/370182775

http://topic.csdn.net/u/20110904/14/8a1ba2c6-7211-4412-aafa-9de4e5982ab9.html看到有人发了个帖子 问58同城登录的问题,我闲的无聊就去58上抓了下包看了下,主要就是p1和p2这两个参数,而两个参数是密码加密后的
结果,去看它的js是怎么加密的,可是它的js是经过压缩过的,只有一行代码,很难找到那个加密的方法,然后我就把它复制下来然后解了下压,结果一眼就看到那个方法,但是他的加密算法很长,用java代码去模拟的话估计很麻烦还容易出错,嘿嘿。所以我就想到了java 调用 js, 说实话这个以前还没怎么用过,不过用过之后感觉确实用着挺爽的,结果我就把关于算法那些方法全部复制了下来,放到一个文件中,然后用java直接传值调用,拿到加密后的密码 ,然后模拟表单提交,果然OK了,58同城这个网站的登录确实比其他一些网站要麻烦一些,不过知道方法之后还是挺简单的,嘿嘿!!
现在上代码 大家看看 。。

我里面用到了我自己写的一些类,大家想看代码的话
到我这个帖子看看就行了:http://topic.csdn.net/u/20110829/17/3650098a-8a43-4e7d-92e6-406a384e646a.html

public  class  WuBa {
  
     public  String test(String name,String pass)  throws  Exception{
         //读取JS文件
         BufferedReader buf =  new  BufferedReader( new  InputStreamReader( new  FileInputStream( new  File( "f:/wuba.js" ))));
          
          //调用js。。这里是关键 啊
          ScriptEngineManager scriptManager =  new  ScriptEngineManager();
          ScriptEngine js = scriptManager.getEngineByExtension( "js" );
          //执行JS
          js.eval(buf);
          long  date =  new  Date().getTime();
          String time = String.valueOf(date).substring( 5 11 );
          Invocable inv2 = (Invocable) js;
           
          //p1的获取                                                   执行js中的方法
          String p1 = (String) inv2.invokeFunction( "getm32str" ,pass,time);
  
         //p2的获取
          String  m32  = (String) inv2.invokeFunction( "hex_md5" ,pass);
           m32 = m32.substring( 8 24 );
            
             String result =  "" ;
             for  ( int  i = m32.length() -  1 ; i >=  0 ; i--) {
                 result += m32.charAt(i);
             }
              
              String p2 = (String)inv2.invokeFunction( "getm16str" ,result,time);
               
              //组装参数
              HashMap params =  new  HashMap();
              params.put( "path" "http://xa.58.com/?utm_source=pinpaizhuanqu&utm_medium=wf&utm_campaign=bp-title" );
              params.put( "p1" , p1);
              params.put( "p2" , p2);
              params.put( "timesign" , String.valueOf(date));
              params.put( "username" , name);
              params.put( "mobile" "手机号" );
              params.put( "password" "password" );
              params.put( "remember" "on" );
              //发送请求并获取cookie
              String cookie =  SendRequest.sendGet( "http://passport.58.com/dologin" null , params,  "utf-8" ).getCookie();
              return  cookie;
     }
      
     public  static  void  main(String[] args)  throws  Exception {
                   String cookie =  new  WuBa().test( "majia200" "majia123" );
                   HashMap header =  new  HashMap();
                   header.put( "Cookie" ,cookie);
                    
                   //登陆我的中心 验证是否登陆成功!
                  System.out.println(EntityUtils.toString( SendRequest.sendGet( "http://my.58.com/" , header,  null "utf-8" ).getHttpEntity(), "utf-8" ));
                    
     }
}

 

转载于:https://www.cnblogs.com/l1b2q31/articles/2767277.html

你可能感兴趣的:(58同城自动登录。。分享给大家)