用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
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章
刺客信条阴影:贝壳谜语解决方案
3 周前
By DDD
Windows 11 KB5054979中的新功能以及如何解决更新问题
2 周前
By DDD
在哪里可以找到原子中的起重机控制钥匙卡
3 周前
By DDD
<🎜>:死铁路 - 如何完成所有挑战
3 周前
By DDD
Atomfall指南:项目位置,任务指南和技巧
4 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

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

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题
gmail邮箱登陆入口在哪里
7649
15


CakePHP 教程
1392
52


steam的账户名称是什么格式
91
11


win11激活密钥永久
73
19


NYT迷你填字游戏答案
36
110

