HttpClient 模拟登录Web版新浪微博

标签: httpclient 模拟 登录 | 发表时间:2014-11-20 08:30 | 作者:
出处:http://m635674608.iteye.com
public static Cookie[] getWCookies(String username,String password) throws HttpException, IOException{
        HttpClient client =null; 
        PostMethod post = null;
        GetMethod get = null;
        try{
            client = new HttpClient();
            client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            post = new PostMethod("http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.16)");    
            String data = getServerTime();    
            String nonce = makeNonce(6);
            NameValuePair[] nvps = new NameValuePair[] {
                                new NameValuePair("entry", "weibo"),
                                new NameValuePair("gateway", "1"),
                                new NameValuePair("from", ""),
                                new NameValuePair("savestate", "7"),
                                new NameValuePair("useticket", "1"),
                                new NameValuePair("ssosimplelogin", "1"),
                                new NameValuePair("vsnf", "1"),
                                new NameValuePair("vsnval", ""),
                                new NameValuePair("su", encodeAccount(username)),
                                new NameValuePair("service", "miniblog"),
                                new NameValuePair("servertime", data),
                                new NameValuePair("nonce", nonce),
                                new NameValuePair("pwencode", "wsse"),
                                new NameValuePair("sp", new SinaSSOEncoder().encode(password, data, nonce)),
                                new NameValuePair("encoding", "UTF-8"),
                                new NameValuePair("returntype", "META"),
                                new NameValuePair(
                                        "url",
                                        "http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack") };
        
                post.setRequestBody(nvps);
                client.executeMethod(post);
                String url = post.getResponseBodyAsString().substring(post.getResponseBodyAsString().indexOf("http://weibo.com/ajaxlogin.php?"),post.getResponseBodyAsString().indexOf("code=0")+6);
                get = new GetMethod(url);
                client.executeMethod(get);
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            get.abort();
            post.abort();
        }
        
        return client.getState().getCookies();
    }

其中密码部分进行了加密,加密的算法在网页的js文件里,网上有人把它改成了Java代码。

下面是SinaSSoEncoder类:

public class SinaSSOEncoder {
    private boolean i = false;
    private int g = 8;

    public SinaSSOEncoder() {

    }

    public String encode(String psw, String servertime, String nonce) {
        String password;
        password = hex_sha1("" + hex_sha1(hex_sha1(psw)) + servertime + nonce);
        return password;
    }

    private String hex_sha1(String j) {
        return h(b(f(j, j.length() * g), j.length() * g));
    }

    private String h(int[] l) {
        String k = i ? "0123456789ABCDEF" : "0123456789abcdef";
        String m = "";
        for (int j = 0; j < l.length * 4; j++) {
            m += k.charAt((l[j >> 2] >> ((3 - j % 4) * 8 + 4)) & 15) + ""
                    + k.charAt((l[j >> 2] >> ((3 - j % 4) * 8)) & 15);
        }
        return m;
    }

    private int[] b(int[] A, int r) {
        A[r >> 5] |= 128 << (24 - r % 32);
        A[((r + 64 >> 9) << 4) + 15] = r;
        int[] B = new int[80];
        int z = 1732584193;
        int y = -271733879;
        int v = -1732584194;
        int u = 271733878;
        int s = -1009589776;
        for (int o = 0; o < A.length; o += 16) {
            int q = z;
            int p = y;
            int n = v;
            int m = u;
            int k = s;
            for (int l = 0; l < 80; l++) {
                if (l < 16) {
                    B[l] = A[o + l];
                } else {
                    B[l] = d(B[l - 3] ^ B[l - 8] ^ B[l - 14] ^ B[l - 16], 1);
                }
                int C = e(e(d(z, 5), a(l, y, v, u)), e(e(s, B[l]), c(l)));
                s = u;
                u = v;
                v = d(y, 30);
                y = z;
                z = C;
            }
            z = e(z, q);
            y = e(y, p);
            v = e(v, n);
            u = e(u, m);
            s = e(s, k);
        }
        return new int[] { z, y, v, u, s };
    }

    private int a(int k, int j, int m, int l) {
        if (k < 20) {
            return (j & m) | ((~j) & l);
        }
        if (k < 40) {
            return j ^ m ^ l;
        }
        if (k < 60) {
            return (j & m) | (j & l) | (m & l);
        }
        return j ^ m ^ l;
    }

    private int c(int j) {
        return (j < 20) ? 1518500249 : (j < 40) ? 1859775393
                : (j < 60) ? -1894007588 : -899497514;
    }

    private int e(int j, int m) {
        int l = (j & 65535) + (m & 65535);
        int k = (j >> 16) + (m >> 16) + (l >> 16);
        return (k << 16) | (l & 65535);
    }

    private int d(int j, int k) {
        return (j << k) | (j >>> (32 - k));
    }

    private int[] f(String m, int r) {
        int[] l;
        int j = (1 << this.g) - 1;
        int len = ((r + 64 >> 9) << 4) + 15;
        int k;
        for (k = 0; k < m.length() * g; k += g) {
            len = k >> 5 > len ? k >> 5 : len;
        }
        l = new int[len + 1];
        for (k = 0; k < l.length; k++) {
            l[k] = 0;
        }
        for (k = 0; k < m.length() * g; k += g) {
            l[k >> 5] |= (m.charAt(k / g) & j) << (24 - k % 32);
        }
        return l;
    }

}
 
转:http://www.cnblogs.com/e241138/archive/2012/09/16/2687124.html


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [httpclient 模拟 登录] 推荐:

HttpClient 模拟登录Web版新浪微博

- - zzm
其中密码部分进行了加密,加密的算法在网页的js文件里,网上有人把它改成了Java代码. 下面是SinaSSoEncoder类:. 转:http://www.cnblogs.com/e241138/archive/2012/09/16/2687124.html. 已有 0 人发表留言,猛击->> 这里<<-参与讨论.

HttpClient 模拟登录手机版新浪微博

- - zzm
我们要做的就是获取服务器需要的数据,然后用HttpClient模拟浏览器提交. go标签内的href是我们第二次请求的地址,通过这个地址来获取cookie. 用户密码那个field的name属性是随机变化的,需要先获取它然后提交. 思路:先获取表单的值,然后用POST方法提交. 注意添加RequestHeader信息,否则会被服务器拒绝(403).

HttpClient 4.0 保持登录session 访问网页

- - ITeye博客
session的保持是通过cookie来维持的,所以如果用户有勾选X天内免登录,这个session 就X天内一直有效,就是通过这个cookie来维护. 如果没选X天内免登录,基本上就本次才能保持session,下次打开浏览器就要重新登录了. 所以在web安全里,黑客通过XSS,最终目的就是获取cookie,从免登录直接进入系统.

HttpClient 与 Close_Wait

- - 互联网 - ITeye博客
服务器A需要通过HttpClient去连接另一个系统B提供的服务,运行一段时间后抛出以下异常:. 在服务器B上运行netstat命令,发现大量连接处于 CLOSE_WAIT 状态. 简单来说CLOSE_WAIT数目过大是由于被动关闭连接处理不当导致的. 我说一个场景,服务器A会去请求服务器B上面的apache获取文件资源,正常情况下,如果请求成功,那么在抓取完资源后服务器A会主动发出关闭连接的请求,这个时候就是主动关闭连接,连接状态我们可以看到是TIME_WAIT.

Httpclient远程调用WebService示例(Eclipse+httpclient)

- - 企业架构 - ITeye博客
我们将Web Service发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该Web Service,常用的有两种:.       1、通过浏览器HTTP调用,返回规范的XML文件内容.       2、通过客户端程序调用,返回结果可自定义格式.       接下来,我利用Eclipse作为开发工具,演示一个Httpclient调用WebService的简单示例.

HttpClient使用详解

- - CSDN博客推荐文章
HttpClient:是一个接口. 首先需要先创建一个DefaultHttpClient的实例. 先创建一个HttpGet对象,传入目标的网络地址,然后调用HttpClient的execute()方法即可:. 创建一个HttpPost对象,传入目标的网络地址:. 通过一个NameValuePair集合来存放待提交的参数,并将这个参数集合传入到一个UrlEncodedFormEntity中,然后调用HttpPost的setEntity()方法将构建好的UrlEncodedFormEntity传入:.

Apache HttpClient 4.3开发指南

- - CSDN博客推荐文章
《Apache HttpClient 4.3开发指南》. 作者:chszs,转载需注明. 博客主页: http://blog.csdn.net/chszs. Apache HttpClient 4系列已经发布很久了,但由于它与HttpClient 3.x版本完全不兼容,以至于业内采用此库的公司较少,在互联网上也少有相关的文档资料分享.

Android HttpURLConnection及HttpClient选择

- - Trinea
介绍Android中Http请求方式的选择、区别及几个常用框架对API的选择. Android Http请求API主要分两种:. 第一种是Java的HttpURLConnection,默认带gzip压缩. 第二种Apache的HttpClient,默认不带gzip压缩. 两种方式请求connection都是keep alive,默认User-Agent不同.

HttpClient 连接池管理

- - IT瘾-dev
随着微服务的流行,服务之间的http调用越来越多. 在java里面我们可以使用httpclient这个开源工具类来进行处理,但若使用不当,可能性能会比较差,尤其是连接池是否能正常使用. 接下来会详细分析下httpclient的连接池原理. 使用httpclient的好处. 1)、降低延迟:如果不采用连接池,每次连接发起Http请求的时候都会重新建立TCP连接(经历3次握手),用完就会关闭连接(4次挥手),如果采用连接池则减少了这部分时间损耗.

配置使用连接池的httpClient

- - 企业架构 - ITeye博客
httpClient4.3开始弃用了DefaultHttpClient和PoolingClientConnectionManager.原来这样配置的连接工厂. 现在改用spring推荐的类,配置如下:.   配置带有连接池的org.springframework.web.client.RestTemplate.