discuz類比登入實現自動頂帖php程式_PHP教程

來源:互聯網
上載者:User
在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論壇並且實現自動頂帖功能。 其實類比登入就那點事,無...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.