Java 实现对Discuz 论坛登录 ()
我们先来看看Discuz 论坛登录需要的参数, 通过浏览器的调试模式可以得出。
从图中看到POST 提交 登录参数。 头部信息 mod : logging 以及 表单信息Form Data。
那么登录参数代码就来了。
<pre name="code" class="java">/**
* 客户端登录的方法
* @param client
* @param uname 用户名
* @param passwd 密码
* @param url 论坛地址
* @return
*/
public static boolean Login(HttpClient client,String uname,String passwd,String url){
HttpClient httpClient = client;
HttpPost httpPost=new HttpPost(url+"/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1");
List params=new ArrayList<Object>();
params.add(new BasicNameValuePair("username",uname));
params.add(new BasicNameValuePair("password",passwd));
String ans = null;
try {
httpPost.setEntity(new UrlEncodedFormEntity( params, "UTF-8"));
HttpResponse response=httpClient.execute(httpPost);
HttpEntity entity=response.getEntity();
ans=EntityUtils.toString(entity);
// System.out.println(ans);
if((ans.lastIndexOf(url+"/./")) !=-1){
//获取用户的一些信息
HttpGet getD=new HttpGet(url+"/");
response = httpClient.execute(getD);
entity=response.getEntity();
ans=EntityUtils.toString(entity,"GBK");
UkUser.uname =uname;
UkUser.discuz_uid=ans.substring(ans.lastIndexOf("discuz_uid = '")+14, ans.lastIndexOf("', cookiepre"));
UkUser.formhash=ans.substring(ans.lastIndexOf("formhash=")+9,ans.lastIndexOf("formhash=")+17);
return true;
}
}catch (Exception e){
e.printStackTrace();
return false;
}
return false;
}
这里需要抓取 discuz_uid 为用户的ID 以及登录后分配的一个formhash
n那么我们来看看主函数
public static void main(String[] args){
HttpClient httpClient = new DefaultHttpClient();
if(login(httpClinet,name,passwd,url)){
System.out.println("登录成功");
}
else {
System.out.printlin("登录失败");
}
}
Ok ,这里需要用到org.apache包, 在Android 中应该是自带了。 纯Java 需要引入这些包。