疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java实现58同城自动登录


 

       58同城登录的问题,我闲的无聊就去58上抓了下包看了下,主要就是p1和p2这两个参数,而两个参数是密码加密后的

  结果,去看它的js是怎么加密的,可是它的js是经过压缩过的,只有一行代码,很难找到那个加密的方法,然后我就把它复制下来然后解了下压,结果一眼就看到那个方法,但是他的加密算法很长,用java代码去模拟的话估计很麻烦还容易出错,嘿嘿。所以我就想到了java 调用 js, 说实话这个以前还没怎么用过,不过用过之后感觉确实用着挺爽的,结果我就把关于算法那些方法全部复制了下来,放到一个文件中,然后用java直接传值调用,拿到加密后的密码 ,然后模拟表单提交,果然OK了,58同城这个网站的登录确实比其他一些网站要麻烦一些,不过知道方法之后还是挺简单的,嘿嘿!!

  现在上代码 大家看看 。。

  我里面用到了我自己写的一些类,大家想看代码的话

  到我这个帖子看看就行了:

  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"));

  }

  }