用php_curl对discuzx 2.5模拟登陆,保存cookie,并进行发帖的类
<?php /* * * 作者:PHP中文网 * 类用途: 实现discuz2.5登陆发帖 */ class discuz_post{ var $login_url; var $post_login_array=array( ); var $post_url; var $cookie_file; public function get_formhash($login_url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $login_url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $contents = curl_exec($ch);//print_r($contents);die; curl_close($ch); //正常发布的版本用如下方法可以获得登陆部分的formhash preg_match('/<input type="hidden"name="formhash"value="(.*)"/>/isU', $contents, $matches); //echo"<pre class="brush:php;toolbar:false">"; //print_r($matches);die; if(!empty($matches)) { $formhash = $matches[1]; } else { // die('Not found the forumhash.'); } return $formhash; } public function getcookie($login_url,$post){ $cookie_file = tempnam('./temp','cookie'); //print_r($cookie_file);die; $ch = curl_init($login_url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_exec($ch); curl_close($ch); $this->cookie_file=$cookie_file; return $cookie_file; } public function use_cookie($send_url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $send_url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_file); $contents = curl_exec($ch); curl_close($ch); //获得发帖页面的fromhash preg_match_all('/<input type="hidden"name="formhash"id="formhash"value="(.*)"/>/isU',$contents,$matches); if(!empty($matches)){ $formhash = $matches[1][0]; }else { $formhash='';//没有 } return $formhash; } public function post_newthread($send_url,$thread_data){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $send_url); curl_setopt($ch, CURLOPT_REFERER, $send_url);//伪装REFERER curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_file); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $thread_data); $contents = curl_exec($ch); curl_close($ch); return 1; } } //下面是代码例子******************************************************************************* $rc= new discuz_post(); //登陆的地址 $login_url='http://bbs.phpchina.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes'; $theformhash= $rc->get_formhash($login_url); //登陆部分需要发送的数据,这里处理没有验证码的 $login_array=array( 'username'=>'用户名', 'password'=>'密码', 'referer'=>'http://bbs.phpchina.com/', 'questionid'=>0, 'answer'=>'', 'seccodeverify'=>'', 'formhash'=>$theformhash,//这个貌似没有也可以发帖滴 ); //获得cookie文件 $the_cookie_file= $rc->getcookie($login_url,$login_array); $send_url ='http://bbs.phpchina.com/forum.php?mod=post&action=newthread&fid=2&infloat=yes'; $thesendformhash= $rc->use_cookie($send_url);//利用cookie文件的 $post_array=array( 'subject' =>"发帖,发帖测试",//标题 'message' =>"内容噢噢噢噢噢噢噢噢",//要超过10个字,奶奶的 'topicsubmit' =>"yes", 'extra' => '', 'tags' => 'Curl',//帖子标签 'formhash'=>$thesendformhash, ); $rc->post_newthread($send_url,$post_array);//发了一贴 echo"<pre class="brush:php;toolbar:false">"; print_r($rc); echo $theformhash; echo $the_cookie_file; echo $thesendformhash; unlink($rc->cookie_file);//删除cookie文件,也可以不删除 echo"ok!"; ?>
登入後複製
登入後複製
<?php /* * * 作者:PHP中文网 * 类用途: 实现discuz2.5登陆发帖 */ class discuz_post{ var $login_url; var $post_login_array=array( ); var $post_url; var $cookie_file; public function get_formhash($login_url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $login_url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $contents = curl_exec($ch);//print_r($contents);die; curl_close($ch); //正常发布的版本用如下方法可以获得登陆部分的formhash preg_match('/<input type="hidden"name="formhash"value="(.*)"/>/isU', $contents, $matches); //echo"<pre class="brush:php;toolbar:false">"; //print_r($matches);die; if(!empty($matches)) { $formhash = $matches[1]; } else { // die('Not found the forumhash.'); } return $formhash; } public function getcookie($login_url,$post){ $cookie_file = tempnam('./temp','cookie'); //print_r($cookie_file);die; $ch = curl_init($login_url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_exec($ch); curl_close($ch); $this->cookie_file=$cookie_file; return $cookie_file; } public function use_cookie($send_url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $send_url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_file); $contents = curl_exec($ch); curl_close($ch); //获得发帖页面的fromhash preg_match_all('/<input type="hidden"name="formhash"id="formhash"value="(.*)"/>/isU',$contents,$matches); if(!empty($matches)){ $formhash = $matches[1][0]; }else { $formhash='';//没有 } return $formhash; } public function post_newthread($send_url,$thread_data){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $send_url); curl_setopt($ch, CURLOPT_REFERER, $send_url);//伪装REFERER curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_file); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $thread_data); $contents = curl_exec($ch); curl_close($ch); return 1; } } //下面是代码例子******************************************************************************* $rc= new discuz_post(); //登陆的地址 $login_url='http://bbs.phpchina.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes'; $theformhash= $rc->get_formhash($login_url); //登陆部分需要发送的数据,这里处理没有验证码的 $login_array=array( 'username'=>'用户名', 'password'=>'密码', 'referer'=>'http://bbs.phpchina.com/', 'questionid'=>0, 'answer'=>'', 'seccodeverify'=>'', 'formhash'=>$theformhash,//这个貌似没有也可以发帖滴 ); //获得cookie文件 $the_cookie_file= $rc->getcookie($login_url,$login_array); $send_url ='http://bbs.phpchina.com/forum.php?mod=post&action=newthread&fid=2&infloat=yes'; $thesendformhash= $rc->use_cookie($send_url);//利用cookie文件的 $post_array=array( 'subject' =>"发帖,发帖测试",//标题 'message' =>"内容噢噢噢噢噢噢噢噢",//要超过10个字,奶奶的 'topicsubmit' =>"yes", 'extra' => '', 'tags' => 'Curl',//帖子标签 'formhash'=>$thesendformhash, ); $rc->post_newthread($send_url,$post_array);//发了一贴 echo"<pre class="brush:php;toolbar:false">"; print_r($rc); echo $theformhash; echo $the_cookie_file; echo $thesendformhash; unlink($rc->cookie_file);//删除cookie文件,也可以不删除 echo"ok!"; ?>
登入後複製
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章
刺客信條陰影:貝殼謎語解決方案
1 個月前
By DDD
Windows 11 KB5054979中的新功能以及如何解決更新問題
3 週前
By DDD
在哪裡可以找到原子中的起重機控制鑰匙卡
1 個月前
By DDD
如何修復KB5055523無法在Windows 11中安裝?
2 週前
By DDD
Inzoi:如何申請學校和大學
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)