php中通过curl模拟登陆discuz论坛的实现代码


Posted in PHP onFebruary 16, 2012

libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
php的curl真的是相当好用,网上一搜索相关文章都是关于curl模拟登陆的,很少人提供模拟discuz发贴的源码。

<?php 
$discuz_url = 'http://127.0.0.1/discuz/';//论坛地址 
$login_url = $discuz_url .'logging.php?action=login';//登录页地址 $post_fields = array(); 
//以下两项不需要修改 
$post_fields['loginfield'] = 'username'; 
$post_fields['loginsubmit'] = 'true'; 
//用户名和密码,必须填写 
$post_fields['username'] = 'tianxin'; 
$post_fields['password'] = '111111'; 
//安全提问 
$post_fields['questionid'] = 0; 
$post_fields['answer'] = ''; 
//@todo验证码 
$post_fields['seccodeverify'] = ''; 
//获取表单FORMHASH 
$ch = curl_init($login_url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$contents = curl_exec($ch); 
curl_close($ch); 
preg_match('/<input\s*type="hidden"\s*name="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches); 
if(!empty($matches)) { 
$formhash = $matches[1]; 
} else { 
die('Not found the forumhash.'); 
} 
//POST数据,获取COOKIE,cookie文件放在网站的temp目录下 
$cookie_file = tempnam('./temp','cookie'); 
$ch = curl_init($login_url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); 
curl_exec($ch); 
curl_close($ch); 
//取到了关键的cookie文件就可以带着cookie文件去模拟发帖,fid为论坛的栏目ID 
$send_url = $discuz_url."post.php?action=newthread&fid=2"; 
$ch = curl_init($send_url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
$contents = curl_exec($ch); 
curl_close($ch); 
//这里的hash码和登陆窗口的hash码的正则不太一样,这里的hidden多了一个id属性 
preg_match('/<input\s*type="hidden"\s*name="formhash"\s*id="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches); 
if(!empty($matches)) { 
$formhash = $matches[1]; 
} else { 
die('Not found the forumhash.'); 
} 
$post_data = array(); 
//帖子标题 
$post_data['subject'] = 'test2'; 
//帖子内容 
$post_data['message'] = 'test2'; 
$post_data['topicsubmit'] = "yes"; 
$post_data['extra'] = ''; 
//帖子标签 
$post_data['tags'] = 'test'; 
//帖子的hash码,这个非常关键!假如缺少这个hash码,discuz会警告你来路的页面不正确 
$post_data['formhash']=$formhash; 
$ch = curl_init($send_url); 
curl_setopt($ch, CURLOPT_REFERER, $send_url); //伪装REFERER 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
$contents = curl_exec($ch); 
curl_close($ch); 
//清理cookie文件 
unlink($cookie_file); 
?>
PHP 相关文章推荐
php的计数器程序
Oct 09 PHP
php 三维饼图的实现代码
Sep 28 PHP
用php实现选择排序的解决方法
May 04 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
php四种基础算法代码实例
Oct 29 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 PHP
tp5框架无刷新分页实现方法分析
Sep 26 PHP
PHP 时间处理类Carbon
May 20 PHP
初品cakephp 入门基础
Feb 16 #PHP
php线性表顺序存储实现代码(增删查改)
Feb 16 #PHP
用PHP实现Ftp用户的在线管理
Feb 16 #PHP
PHP排序算法的复习和总结
Feb 15 #PHP
php网上商城购物车设计代码分享
Feb 15 #PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 #PHP
php _autoload自动加载类与机制分析
Feb 10 #PHP
You might like
php UTF8 文件的签名问题
2009/10/30 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
Python引用模块和查找模块路径
2016/03/17 Python
Python检测网站链接是否已存在
2016/04/07 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
学习python的前途 python挣钱
2019/02/27 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
Python绘制热力图示例
2019/09/27 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
8种常用的Python工具
2020/08/05 Python
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
网络技术支持面试题
2013/04/22 面试题
教育系毕业生中文求职信范文
2013/10/06 职场文书
视光学专业毕业生推荐信
2013/10/28 职场文书
班组长的岗位职责
2013/12/09 职场文书
家长学校实施方案
2014/03/15 职场文书
企业标语口号
2014/06/10 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python