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

标签: httpclient 模拟 登录 | 发表时间:2014-11-20 16:29 | 作者:
出处:http://m635674608.iteye.com

我们要做的就是获取服务器需要的数据,然后用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 人发表留言,猛击->> 这里<<-参与讨论


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.