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<String, String> params = new HashMap<String, String>(); 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<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")); } }
浙公网安备 33010602011771号