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

我们要做的就是获取服务器需要的数据,然后用HttpClient模拟浏览器提交。

有几点需要说明一下:

go标签内的href是我们第二次请求的地址,通过这个地址来获取cookie。

用户密码那个field的name属性是随机变化的,需要先获取它然后提交。

下面是整个源代码。

思路:先获取表单的值,然后用POST方法提交。注意添加RequestHeader信息,否则会被服务器拒绝(403)。

复制代码
/**
     * 获取手机版微博的cookies
     * @param username
     *             微博用户名
     * @param password
     *             微博密码
     * @return    Cookie[]
     */
    public Cookie[] getMCookies(String username, String password){
        Cookie[] cookies = null;
        HttpClient client;
        PostMethod post = null;
        try{
            Document doc = Jsoup.connect("http://3g.sina.com.cn/prog/wapsite/sso/login.php").get();
            Elements elements = doc.getElementsByTag("postfield");
        
            String randUrl = doc.getElementsByTag("go").first().attr("href");        
            String pwName = elements.get(1).attr("name");
            String vkValue = elements.get(2).attr("value");
            String backURL = elements.get(4).attr("value");
            String backTitle = elements.get(5).attr("value");
            
            String url = "http://3g.sina.com.cn/prog/wapsite/sso/"+randUrl;
    
            post = new PostMethod(url);
            
            post.setRequestHeader("User-Agent","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1");
            post.setRequestHeader("Referer", "http://weibo.com/");
            post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            
            post.setParameter("mobile", username);
            post.setParameter(pwName,password);
            post.setParameter("vk", vkValue);
            post.setParameter("remember", "on");
            post.setParameter("backURL", backURL);
            post.setParameter("backTitle", backTitle);
            post.setParameter("submit", "1");            
            
            client = new HttpClient();            
            client.executeMethod(post);
            cookies = client.getState().getCookies();
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            post.abort();
        }
            
        return cookies; 
    }
复制代码

如果用户名密码正确的话,应该就可以获得cookie了。

接下来如果想要访问某些网页只需要带上cookie就行了。

由于新浪的网页可能会变化,所以不保证此方法一直能用,不过大体思路应该是不会变的。

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值