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

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

其实模拟登录就那点事,无法就是获得相应的参数,然后模拟发送,把获得的COOKIE 带入下一步操作中去

discuzx 系列为防止灌水,一直在用 formhash() 这个函数:

1、下面来看下formhash 这个函数:

代码如下

复制代码

function formhash($specialadd = '') {

global $_G;

$hashadd = defined('IN_ADMINCP') ? 'Only For Discuz! Admin Control Panel' : '';

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

代码如下

复制代码

if(empty($this->var['cookie']['saltkey'])) {

$this->var['cookie']['saltkey'] = random(8);//这一步不要去管

dsetcookie('saltkey', $this->var['cookie']['saltkey'], 86400 * 30, 1, 1);

}

$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

代码如下

复制代码

$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 部分代码

代码如下

复制代码

$ch = curl_init($url); //初始化

curl_setopt($ch, CURLOPT_HEADER, 1); //不返回header部分

curl_setopt($ch, CURLOPT_POST, 1);//是否

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返回字符串,而非直接输出

curl_setopt($ch,CURLOPT_REFERER,$refer);

curl_setopt($ch, CURLOPT_COOKIE, $tocookies); //存储cookies

curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);

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

http://www.bkjia.com/PHPjc/629893.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/629893.htmlTechArticle在php 模仿登录我们需要使用curl_init函数,下面我来介绍利用 curl 模拟 post 登录discuz论坛并且实现自动顶帖功能。 其实模拟登录就那点事,无...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值