php专区

 首页 > php专区 > PHP应用 > CMS建站 > discuz模拟登录实现自动顶帖php程序 - Discuz

discuz模拟登录实现自动顶帖php程序 - Discuz

分享到:
【字体:
导读:
          在php 模仿登录我们需要使用curl_init函数,下面我来介绍利用 curl 模拟 post 登录discuz论坛并且实现自动顶帖功能.其实模拟登录就那点事,无法就是获得相应的参数,然后模拟发送,把获得的C...

discuz模拟登录实现自动顶帖php程序

在php 模仿登录我们需要使用curl_init函数,下面我来介绍利用 curl 模拟 post 登录discuz论坛并且实现自动顶帖功能.

其实模拟登录就那点事,无法就是获得相应的参数,然后模拟发送,把获得的COOKIE 带入下一步操作中去discuzx 系列为防止灌水,一直在用 formhash() 这个函数.

1、下面来看下formhash 这个函数,代码如下:

  1. function formhash($specialadd = '') { 
  2.     global $_G
  3.     $hashadd = defined('IN_ADMINCP') ? 'Only For Discuz! Admin Control Panel' : '';//开源代码phpfensi.com 
  4.     return          substr(md5(substr($_G['timestamp'],0,-7).$_G['username'].$_G['uid'].$_G['authkey'].$hashadd.$specialadd), 8, 8);  

注:生成方式:1、截取的时间戳,2、用户名,3、用户ID,4、authkey,5、hashadd(定值),6、specialadd(定值)

因为存在用户名和用户id,所以在登录前跟登录后的产生的值是不同的,即:在登录前跟登录后你要2次来获得fromhash;

那么authkey又是个什么东西呢 ?

2、关于authkey

代码位置:/source/class/discuz/discuz_application.php,代码如下:

  1. if(emptyempty($this->var['cookie']['saltkey'])) { 
  2.  $this->var['cookie']['saltkey'] = random(8);//这一步不要去管 
  3.  dsetcookie('saltkey'$this->var['cookie']['saltkey'], 86400 * 30, 1, 1); 
  4. $this->var['authkey'] = md5($this->var['config']['security']['authkey'].$this->var['cookie']['saltkey']);  

在这里可以看到:authkey是根据配置文件的authkey 和cookie 里面的saltkey 来生成的,其实在这里就可以看出来了,只要网站的$this->var['cookie']['saltkey'] 这个值始终保存在cookie里面就这样就可以保证 formhash 那里生成的值永远是一样的,永远是相对的.

3 cookie系列

discuz 的cookie的前缀是随机生成的,代码位置:/source/class/discuz/discuz_application.php,代码如下:

  1. $this->var['config']['cookie']['cookiepre'] = $this->var['config']['cookie']['cookiepre'].substr(md5($this->;var['config']['cookie']['cookiepath'].'|'.$this->;var['config']['cookie']['cookiedomain']), 0, 4).'_';   

只要你登录下网站看看cookie 的设置这里就可以了,他的前缀确实hi一直不变的,当然改了配置文件那肯定会变,到底该怎么写呢:说下我实现的思路.

1、登录下访问网站一下抓取网页返回的 saltkey(cookie),formhash(值) 这两个值(saltkey在下面一定要带上,而且上下文要一致)

2、构造登录的内容然后模拟post 提交 (一定要带上第一步抓取到的cookie跟formhash 这一个值)

3、如果登录成功,接着获取一个页面的 formhash 跟设置的cookie(这次获得到的formhash 就是你可以一直使用的了)

4、构造发帖还有顶帖的post 提交到页面 (cookie 跟formhash 还是重点 )

关于php 使用 crul 模拟 post 部分代码,代码如下:

  1. $ch = curl_init($url); //初始化 
  2.     curl_setopt($ch, CURLOPT_HEADER, 1); //不返回header部分 
  3.     curl_setopt($ch, CURLOPT_POST, 1);//是否 
  4.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返回字符串,而非直接输出 
  5.     curl_setopt($ch,CURLOPT_REFERER,$refer); 
  6.     curl_setopt($ch, CURLOPT_COOKIE,  $tocookies); //存储cookies 
  7.     curl_setopt($ch, CURLOPT_POSTFIELDS, $datas); 

代码就不共享了,有能力的朋友自己写把,这东西容易引起混乱.

分享到:
discuz X的单件模式 - Discuz
discuz X的单件模式 文章介绍了一个关于discuz X的单件模式原创文章,PPC高亮插件太不友好了,我直接贴txt内容都会有奇奇怪怪问题发生. X的只要文件开头都有这么一句话,代码如下: $discuz = & discuz_core::instance();  // instance()属于discuz_core类在class_core.php  func...
确定其中用到的是Discuz哪一种程序版本 -...
确定其中用到的是Discuz哪一种程序版本 每一种开源程序每隔一段时间都会进行程序的升级,程序的升级并不是意味着之前的程序版本不能使用了,而是最新更新的这款程序版本比以前功能更加丰富了. 我的好几个wordpress博客程序每隔一段时间都会提示更新版本,但是我一直都没有去更新,博客的运行都是...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……