懂HttpClient的朋友如果有兴趣可以帮忙试试实现一下58网的自动登录,至今我已经用httpclient自动登录过无数网站,唯独58网这个比较特殊,实在看不懂。
网址:http://passport.58.com/login
账号:majia200
密码:majia123
httpclient官网:http://hc.apache.org/
望各路高手来一起挑战这个难题!

解决方案 »

  1.   


    你可以用firebug查看源码 很方便 一般的网站是用post方式提交用户名和密码 它这个却是用get方式 而且密码好像经过处理了 现在我还没看懂它到底是怎么做到的 经验不足啊
      

  2.   

    firebug看看,提交时有什么特殊信息,比如cookie,hidden等。
      

  3.   


    我看过好多次了 我不知道他密码是怎么处理的这是用HttpAnalyzer这款软件查看的header信息:
    (Request-Line):GET /dologin?path=http%3A%2F%2Fmy.58.com&p1=ae9d2f6383310996b7ef9342fe6abb06&p2=a6e3864952521d5cc015d573e4b98cd3&timesign=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
      

  4.   

    采用FireBug查看登录58的时候是什么信息传递过去了,自己参考下~
      

  5.   

    别猜测啊 动下手多好 JS文件我看过了 有难度所以才拿出来 看来没几个人用过httpclient
      

  6.   


    我汗呐 你看看上面的留言 我搞不懂为什么一大堆人叫我用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这两个方法在哪里
      

  7.   


    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
    }
    就是这些方法。。剩下的你懂了吧!要是还做不出来。。那还是放弃吧!
      

  8.   

    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==红色部分是利用Google的一个js文件生成的追踪信息,蓝色部分是经过base64加密过后的东西,你可以解密看看是什么。不懂他的规则没关系,你可以把如上提交信息直接模拟下,反正你用户名密码都是死的。
    很简单的。
      

  9.   

    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>'
    });  
    用firebug查看js是,看如何加密信息的,更重要的是让你查看网络请求信息。
      

  10.   

    我把58同城自动登录的代码分享了,你看看吧 http://topic.csdn.net/u/20110910/21/5d70f979-52ad-4016-8207-db6e4ce57fbb.html
      

  11.   

    太感谢pl3121605999和softroad,你们的热情让我很感动。这段时间在忙别的事情都忘了来看帖子了,我也是刚开始边工作边学习,几天前在网上找到一个在线解压JS的网站又找到rhino这个工具去调用JS,可惜弹出了一些莫名奇妙的bug。由于要忙其他的工作就放一边了。晚上看到pl3121605999的分享帖子,非常激动。拷贝下来一试竟然出了一样的bug,好在我刚刚终于明白原因了。废话不多说了,结贴先,再到你的帖子里说明我遇到的bug。
      

  12.   

    我想用httpwebRequest来实现这个功能,需要模拟那些东西 java的我看不太懂 高手指点啊 
      

  13.   

    我用C#实现了你可以去下载源码了,
    我在另外一个地方也发过了,
    去看看吧
    C#里执行Js,C#解析JS方法--附58同城自动登录功能