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

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

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

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpemgwMDc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

能够看到一共同拥有7个參数:

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

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

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

刚好是一样的。

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

第四个是你输入法password。

第五个是安全提问的编号,因为我们没有选安全提问的问题,所以编号为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){ }

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpemgwMDc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

能够看到显示的是已登陆的D版的内容。

Android HttpClient自己主动登陆discuz论坛!的更多相关文章

  1. python模拟登陆discuz论坛

    #! /usr/bin/env python # -*- coding: utf-8 -*- import urllib2, urllib, cookielib, re, time class Rob ...

  2. Discuz论坛黑链清理教程

    本人亲测有效,原创文章哦~~~ 论坛黑链非常的麻烦,如果你的论坛有黑链,那么对不起,百度收录了你的黑链,不会自动删除,需要你手动去清理. 什么是黑链 黑链,顾名思义,就是一些赌博网站的外链,这些黑链相 ...

  3. 实现Discuz论坛客户端应用源码

    通过使用该源码,开发者可以迅速地将Discuz论坛迁移到Android客户端中.不需要任何的开发工作即可拥有属于自己论坛的Android客户端 源码下载:http://code.662p.com/vi ...

  4. discuz论坛与其它网站登录注册整合

    discuz论坛与其它网站登录注册整合 本文以discuz 7.0.0 php版本的论坛与 .net 2.0的网站注册登录整合为类.没有采用uc_center或第三方插件.以另类的方式实现.此方法实现 ...

  5. jsp网站与discuz论坛用户同步

    需求分析: 要想实现A(jsp网站)和B(discuz论坛)的同步,这里说的同步指的是 在AB网站任意一方注册之后在另一方都可以直接登录 AB两网站之间的用户登陆状态是同步的,在任意一方登录后,另一方 ...

  6. 织梦系统与discuz论坛整合方法

    如何完成dedecms模板系统与discuz论坛整合呢? 这里的整合指会员信息,会员登陆.退出的同步:论坛信息的引用:等等. 首先,我们先来安装织梦(dedecms)系统. 然后,我们在网站根目录下建 ...

  7. Discuz 论坛 (LAMP环境)

    Discuz 论坛系统运行依赖 LAMP/LNMP的基础环境. 1.使用 yum 安装 MySQL: yum install mysql-server -y service mysqld restar ...

  8. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  9. 织梦dedecms整合discuz论坛的操作方法

    织梦dedecms和discuz论坛整合主要用途,是让两个系统共享用户数据,同一个用户可以在两个网站都可以登录.在我们制作织梦cms模板的时候,有时需要整合discuz里的东细.本文主要讲解一下ded ...

随机推荐

  1. Mac OS X安装OpenGL

    Mac OS X安装OpenGL 安装最新的cmake brew install cmake brew upgrade cmake 安装glew brew install glew 安装GLTools ...

  2. Java开发规范(MySQL开发规范)-《阿里巴巴Java开发手册》

    官方介绍:https://yq.aliyun.com/articles/69327 官方GitHub(包括IDE规范检查插件):https://github.com/alibaba/p3c 1.0.2 ...

  3. Table Code

    post.PostToTags.Where(t => tagArray.Contains(t.PostTag.Name, comparerWihtoutCases) && !t. ...

  4. aspose.word 读取word段落内容

    注:转载请标明文章原始出处及作者信息 aspose.word 插件下载 链接: http://pan.baidu.com/s/1qXIgOXY 密码: wsj2 使用原因:无需安装office,无兼容 ...

  5. 一:Shiro知识整理

    一:springboot快速入门: 1.建立Maven项目,导入springboot父工程 <!-- 继承springboot默认父工程 --> <parent> <gr ...

  6. flask路由末端带斜线和不带斜线的区别

    路由末端带有“/” app.route('/test/') 在浏览器中输入http://127.0.0.1:5000/test/ 和http://127.0.0.1:5000/test都能访问 路由末 ...

  7. openMP编程(上篇)之并行程序设计

    openMP简介 openMP是一个编译器指令和库函数的集合,主要是为共享式存储计算机上的并行程序设计使用的. 当计算机升级到多核时,程序中创建的线程数量需要随CPU核数变化,如在CPU核数超过线程数 ...

  8. C中的私有成员

    skynet_context声明在.h里 但定义在.c里面 外部使用的时候无法用ctx->handle获取私有成员,会提示解引用类型错误 必须用.h里函数获取ctx里属性.

  9. vs2015 web项目加载失败解决办法

    1.问题 ---------------------------Microsoft Visual Studio---------------------------Web 应用程序项目 XXWeb 已 ...

  10. iview table数据排序不正确

    在使用iview的table组件时,要做排序 代码: sortable: true,sortMethod: (a, b, type) => { if (type === 'desc') { re ...