Android HttpClient自动登陆discuz论坛!

你登陆论坛的时候,我们先看看浏览器干了什么事儿:

用Firefox打开HiPda 的登陆页面,输入用户名和密码,点登陆。

下面是通过firebug插件获取的数据:

可以看到浏览器这个http://www.hi-pda.com/forum/logging.php?action=login&loginsubmit=yes&inajax=1网址发了一个POST请求

看一下它POST的参数是什么:

可以看到一共有7个参数:

第一个cookietime=259200,这个是固定的,直接传这个值过去就行;

第二个formhash是discuz论坛的一个设置,值在当前页面的源码里。

比如我们看一下网页的源码,搜一下formhash跟这里的formhash是不是一样的:

刚好是一样的。

第三个值loginfield是固定的,等于username;

第四个是你输入法密码;

第五个是安全提问的编号,由于我们没有选安全提问的问题,所以编号为0;

第六个referer,直接输进去这个就行;

第七个是你的用户名。

下面我们用代码实现自动登录。

首先通过上面的分析,首先需要formhash的值,这个我们可以通过HttpGet得到网页的源码,把formhash解析出来。

                HttpClient httpClient = new DefaultHttpClient();
                //得到网页的formhash值,用Jsoup解析出来
                HttpGet httpGet = new HttpGet("http://www.hi-pda.com/forum/logging.php?action=login");
                try{
                    HttpResponse httpResponse = httpClient.execute(httpGet);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    String s = EntityUtils.toString(httpEntity,"GBK");

                    Element formhash_Element = Jsoup.parse(s).select("input[name=formhash]").first();
                    formhash = formhash_Element.attr("value");
                    System.out.println(formhash);
                }
                catch(Exception e ){
                }

下面我们就可以登陆了,用HttpPost:

                HttpPost httpPost=new HttpPost("http://www.hi-pda.com/forum/logging.php?action=login&loginsubmit=yes&inajax=1");
                List<NameValuePair> params=new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("formhash",formhash));
                params.add(new BasicNameValuePair("loginfield","username"));
                params.add(new BasicNameValuePair("password","******"));
                params.add(new BasicNameValuePair("questionid","0"));
                params.add(new BasicNameValuePair("referer","http://www.hi-pda.com/forum/index.php"));
                params.add(new BasicNameValuePair("username","******"));
                try {
                    httpPost.setEntity(new UrlEncodedFormEntity(params, "GBK"));

                    HttpResponse response=httpClient.execute(httpPost);
                    HttpEntity entity=response.getEntity();
                    String ans=EntityUtils.toString(entity);

                }catch (Exception e){

                }

现在我们已经登陆成功了,只要用同一个HttpClient对象,就会一直显示登录状态。比如我们用这个httpClient打开一下D版试一下:

                HttpGet getHome = new HttpGet("http://www.hi-pda.com/forum/index.php");
                try{
                    httpClient.execute(getHome);
                }catch (Exception e){

                }
                HttpGet getD=new HttpGet("http://www.hi-pda.com/forum/forumdisplay.php?fid=2");
                try {
                    HttpResponse responseD = httpClient.execute(getD);
                    HttpEntity entityD=responseD.getEntity();
                    String str=EntityUtils.toString(entityD,"GBK");
                    System.out.println(str);
                }catch (Exception e){

                }

可以看到显示的是已登陆的D版的内容。

Android HttpClient自动登陆discuz论坛!,布布扣,bubuko.com

时间: 2024-12-26 15:58:35

Android HttpClient自动登陆discuz论坛!的相关文章

php中通过curl模拟登陆discuz论坛的实现代码

libcurl同时也支持HTTPS认证.HTTP POST.HTTP PUT. FTP 上传(这个也能通过PHP的FTP扩展完成).HTTP 基于表单的上传.代理.cookies和用户名+密码的认证. php的curl真的是相当好用,网上一搜索相关文章都是关于curl模拟登陆的,很少人提供模拟discuz发贴的源码 <?php $discuz_url = 'http://www.lai18.com/';//论坛地址 $login_url = $discuz_url .'login.php?act

phpcms v9和discuz X3.1实现同步登陆退出论坛(已实现)

网络上文章很多,按步骤配置好了之后phpcms可以同步登录dz,但是dz登录后状态却无法同步到phpcms,网络上找了很多资料都大同小异,头大.只能自己调试了,废话不多说了. 以下网络上抄的安装步骤,留着自己用,有安装过的可跳过. 第一步:安装 phpcms V9 .安装 Discuz! X3.1 (同时安装 UCenter). 第二步:在 UCenter 中添加“phpsso 应用”. 1.管理员登录 Discuz! X3.1 管理中心,进入“UCenter”,点击“应用管理”.     2.

phpcms 2008和discuz X3.1实现同步登陆退出论坛(已实现)

网络上文章很多,按步骤配置好了之后phpcms可以同步登录dz,但是dz登录后状态却无法同步到phpcms,网络上找了很多资料都大同小异,头大.只能自己调试了,废话不多说了. 以下网络上抄的安装步骤,留着自己用,有安装过的可跳过. 第一步:安装 phpcms V9 .安装 Discuz! X3.1 (同时安装 UCenter). 第二步:在 UCenter 中添加"phpsso 应用". 1.管理员登录 Discuz! X3.1 管理中心,进入"UCenter",点

lvs 负载均衡两台提供Discuz!论坛服务的服务器

规划: 1.使用lvs的nat模型,负载均衡两台 Discuz 服务器. 2.Discuz 服务器的数据共享解决方案: 部署 Discuz! 论坛程序要解决两大问题: (1).用户上传的附件属于非结构化的数据要保存在文件系统中. 要解决两台提供Discuz!论坛服务的附件共享问题: (A).当用户上传附件时通过地址重写机制把它定向到一台Discuz!服务器,再通过 rsync+innotify实时数据同步方式把附件同步到另一台Discuz!服务器. (B).使用rsync推.拉数据的方式,实现用

类似discuz论坛应用html5源码

类似discuz论坛应用html5源码,这个是一款非常不错的html5实现的社交平台的应用,该应用可以很好兼容android,ios平台的,并且结合了discuz论坛的布局等框架,我们知道discuz做得非常成功,因此该应用借鉴这个系统非常不错的,而且实现的功能也很强大,如可以发布帖子,查找朋友的添加,也利用地图的功能了,还有可以结合微博的使用,如发微博等功能,在这里我就不详细说明了,大家可以看看源代码吧.演示图:登陆界面:<ignore_js_op> 帖子界面:<ignore_js_o

java和Discuz论坛实现单点登录,通过Ucenter(用户管理中心)

果学网-专注IT在线www.prismcollege.com 1,按照下面各大链接的教程,把Base64,Client,PHPFunctions,UC,XMLHelper加入web程序. 2,修改web.xml,加入 <servlet> <display-name>同步UC Server发出的操作指令</display-name> <servlet-name>UC</servlet-name> <servlet-class>com.e

在CentOS 6.7部署wordpress博客系统Discuz论坛系统

在CentOS 6.7部署wordpress博客系统Discuz论坛系统 服务器操作系统:CentOS6.7 博客部署服务器:Httpd-2.2 后台语言:PHP 数据库:MySql 前端框架:WordPress 1.首先安装需要的软件 yum -y install mysql-server httpd phpphp-mysql 2.启动mysql以及httpd服务 service mysqld start service httpd start 3.创建虚拟主机 4.测试 PHP 和Httpd

基于LNMP搭建Discuz!论坛,并配置nginx,php

前面我们已经搭建好了LNMP环境:http://1015489314.blog.51cto.com/8637744/1688048 下面我们基于LNMP来搭建一个Discuz!论坛 一.安装Discuz! 1.新建目录来存放网页等 [[email protected] ~]# mkdir /data/www[[email protected] ~]# cd /data/www   [[email protected] www]# wget http://download.comsenz.com/

Linux FTP自动登陆下载备份,上传文件脚本

使用远程的服务器,对另外一台远程的服务器进行FTP操作,速度要比本地机器操作快很多. 之前写过一篇关于FTP如何手工的在Linux进行远程操作, 今天找到一个自动批量的脚本,感觉很好.满足了我的需要. 我的A网站在香港 我的B服务器Linux的在国内.这样就可以把A网站自动备份到B服务器了. 希望本篇博客能给需要的同学一些帮助. #####从ftp服务器上的/home/data 到 本地的/home/databackup#### #!/bin/bash ftp -n<<! open 192.1