懂HttpClient的朋友如果有兴趣可以帮忙试试实现一下58网的自动登录,至今我已经用httpclient自动登录过无数网站,唯独58网这个比较特殊,实在看不懂。
网址:http://passport.58.com/login
账号:majia200
密码:majia123
httpclient官网:http://hc.apache.org/
望各路高手来一起挑战这个难题!
网址:http://passport.58.com/login
账号:majia200
密码:majia123
httpclient官网:http://hc.apache.org/
望各路高手来一起挑战这个难题!
你可以用firebug查看源码 很方便 一般的网站是用post方式提交用户名和密码 它这个却是用get方式 而且密码好像经过处理了 现在我还没看懂它到底是怎么做到的 经验不足啊
我看过好多次了 我不知道他密码是怎么处理的这是用HttpAnalyzer这款软件查看的header信息:
(Request-Line):GET /dologin?path=http%3A%2F%2Fmy.58.com&p1=ae9d2f6383310996b7ef9342fe6abb06&p2=a6e3864952521d5cc015d573e4b98cd3×ign=1315151249449&username=majia200&mobile=%E6%89%8B%E6%9C%BA%E5%8F%B7&password=password HTTP/1.1
Host:passport.58.com
User-Agent:Mozilla/5.0 (Windows NT 5.1; rv:6.0.1) Gecko/20100101 Firefox/6.0.1
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:zh-cn,zh;q=0.5
Accept-Encoding:gzip, deflate
Accept-Charset:GB2312,utf-8;q=0.7,*;q=0.7
Connection:keep-alive
Referer:http://passport.58.com/login
Cookie:__utma=253535702.706318264.1315151196.1315151196.1315151196.1; __utmb=253535702.1.10.1315151196; __utmc=253535702; __utmz=253535702.1315151196.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); id58=05eNEk5jnXZUIz4NZfMbAg==这是Querying String:
path:http://my.58.com
p1:ae9d2f6383310996b7ef9342fe6abb06
p2:a6e3864952521d5cc015d573e4b98cd3
timesign:1315151249449
username:majia200
mobile:手机号
password:password
我汗呐 你看看上面的留言 我搞不懂为什么一大堆人叫我用firebug查JS 我原本就是用firebug查的…… 查到的结果是:参数:
mobile 手机号
p1 3e8c3c2c31f1d9339627e07a10f9dae1
p2 e7a1e78a2e332ed0d23a18c294f10578
password password
path http://my.58.com
timesign 1315553216713
username majia200timesign、p1、p2相关的JS:
var timespan = 1315555164769 - new Date().getTime();
$(function() {
$.formValidator.initConfig({ formid: "submitForm", errorfocus: false, forcevalid: true, btnid: 'btnSubmit', btnvalue: '登录', btnactionvalue: '登录', fun: function() {
var timesign = new Date().getTime() + timespan;
$("#timesign").val(timesign);
$("#p1").val(getm32str($("#password").val(),timesign+""));
$("#p2").val(getm16str($("#password").val(),timesign+""));
$("#username").addClass("c_ccc").attr("readonly","readonly");
$("#password").val("password").addClass("c_ccc").attr("readonly","readonly");
return true;
}, errorclass: "sc", successclass: "hc", focusclass: "hc", tiphtml: '<div class="mid mid-t1"><div class="conn" id=\'errorTip\'>{0}</div></div>'
}); 但是我找不到getm32str和getm16str这两个方法在哪里
function getm32str(str, timesign) {
if (timesign.length != 13) {
alert("timesign error !!!");
return ""
}
return hex_md5(hex_md5(str) + timesign.substring(5, 11))
}
function getm16str(str, timesign) {
if (timesign.length != 13) {
alert("timesign error !!!");
return ""
}
return hex_md5(hex_md5_16(str) + timesign.substring(5, 11))
}
function hex_md5(s) {
return binl2hex(core_md5(str2binl(s), s.length * chrsz))
}
function str2binl(str) {
var bin = Array();
var mask = (1 << chrsz) - 1;
for (var i = 0; i < str.length * chrsz; i += chrsz) bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
return bin
}
function core_md5(x, len) {
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for (var i = 0; i < x.length; i += 16) {
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd)
}
return Array(a, b, c, d)
}
function binl2b64(binarray) {
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for (var i = 0; i < binarray.length * 4; i += 3) {
var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) | (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) | ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF);
for (var j = 0; j < 4; j++) {
if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F)
}
}
return str
}
就是这些方法。。剩下的你懂了吧!要是还做不出来。。那还是放弃吧!
很简单的。
p1 3e8c3c2c31f1d9339627e07a10f9dae1
p2 e7a1e78a2e332ed0d23a18c294f10578
password password
path http://my.58.com
timesign 1315553216713
username majia200timesign、p1、p2相关的JS:
var timespan = 1315555164769 - new Date().getTime();
$(function() {
$.formValidator.initConfig({ formid: "submitForm", errorfocus: false, forcevalid: true, btnid: 'btnSubmit', btnvalue: '登录', btnactionvalue: '登录', fun: function() {
var timesign = new Date().getTime() + timespan;
$("#timesign").val(timesign);
$("#p1").val(getm32str($("#password").val(),timesign+""));
$("#p2").val(getm16str($("#password").val(),timesign+""));
$("#username").addClass("c_ccc").attr("readonly","readonly");
$("#password").val("password").addClass("c_ccc").attr("readonly","readonly");
return true;
}, errorclass: "sc", successclass: "hc", focusclass: "hc", tiphtml: '<div class="mid mid-t1"><div class="conn" id=\'errorTip\'>{0}</div></div>'
}); 用firebug查看js是,看如何加密信息的,更重要的是让你查看网络请求信息。
我在另外一个地方也发过了,
去看看吧
C#里执行Js,C#解析JS方法--附58同城自动登录功能