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(511);
         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(824);
            
            String result = "";
            for (int i = m32.length() - 1; i >= 0; i--) {
                result += m32.charAt(i);
            }
              
             String p2 = (String)inv2.invokeFunction("getm16str",result,time);
               
             //组装参数
             HashMap<String, String> params = new HashMap<String, String>();
             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<String, String> header = new HashMap<String, String>();
                  header.put("Cookie",cookie);
                    
                  //登陆我的中心 验证是否登陆成功!
                 System.out.println(EntityUtils.toString( SendRequest.sendGet("http://my.58.com/", header, null"utf-8").getHttpEntity(),"utf-8"));
                    
    }
}

 

posted on 2012-11-12 23:34  l1b2q31  阅读(631)  评论(0编辑  收藏  举报

导航