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