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

用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. 转载:怎样用通俗的语言解释REST,以及RESTful?

    作者:覃超链接:https://www.zhihu.com/question/28557115/answer/48094438来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...

  2. Array中对象的排序

    1.子母排序 NSArray *kArrSort = [_dic allKeys]; //这里是字母数组:,g,a,b.y,m…… NSArray *resultkArrSort = [kArrSor ...

  3. Go的接口总结

    一.什么是接口 接口类型是一种抽象的类型,它描述了一系列方法的集合. 接口约定:接口类型中定义的方法即为约定,若一个具体类型实现了所有这些方法,则该类型就满足该接口的约定,或者说它是这个接口类型的实例 ...

  4. deblurGAN

    -- main.py -- util.py -- data_loader.py -- mode.py -- DeblurGAN.py -- vgg19.py -- layer.py -- vgg19. ...

  5. 解决 Java 调用 Azure SDK 证书错误 javax.net.ssl.SSLHandshakeException

    Azure 作为微软的公有云平台,提供了非常丰富的 SDK 和 API 让开发人员可以非常方便的调用的各项服务,目前除了自家的 .NET.Java.Python. nodeJS.Ruby,PHP 等语 ...

  6. Java - 网络IO的阻塞

    最近学习时碰到事件驱动和非阻塞的相关知识,随之想到了Java中的Reactor.io与nio的一些东西:在前辈的博客上翻了翻.复习复习,在此记录一番. 实在找不到比较大点的东西,于是随便弄了个压缩包, ...

  7. python中的单例模式的应用

    1 使用__new__方法 class Singleton(object):    def __new__(cls, *args, **kw):        if not hasattr(cls, ...

  8. 设置$.getJSON同步执行的笨方法

    $.ajaxSettings.async=false; $.getJSON("action/logon_checkAcc.action", function(json){ aler ...

  9. maven仓库中的LastUpdated文件删除脚本

    cleanLastUpdated.bat(windows版本) @echo off rem create by NettQun rem 这里写你的仓库路径 set REPOSITORY_PATH=D: ...

  10. “没有用var声明的为全局变量”这种说法不准确

    结论: “没有用var声明的变量为全局变量”这样的说法不太正确,需要在这句话前面加一个前提,如果①变量前面没有用var声明,②在变量所在在的作用域链中没有这个变量名称,则设置该变量为全局变量. 代码 ...