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分页集合包括使用方法
Oct 21 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
php获取YouTube视频信息的方法
Feb 11 PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 PHP
初识ThinkPHP控制器
Apr 07 PHP
PHP线程的内存回收问题
Jul 08 PHP
基于PHP实现用户注册登录功能
Oct 14 PHP
PHP多维数组指定多字段排序的示例代码
May 16 PHP
Laravel框架定时任务2种实现方式示例
Dec 08 PHP
laravel 框架配置404等异常页面
Jan 07 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 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字符串截取问题
2006/11/28 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
Python版微信红包分配算法
2015/05/04 Python
Python第三方库的安装方法总结
2016/06/06 Python
遗传算法之Python实现代码
2017/10/10 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
详解flask表单提交的两种方式
2018/07/21 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
详解Python 最短匹配模式
2020/07/29 Python
python 6种方法实现单例模式
2020/12/15 Python
html5 学习简单的拾色器
2010/09/03 HTML / CSS
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
C有"按引用传递"吗
2016/09/06 面试题
生物学学生自我评价
2014/01/17 职场文书
工程部岗位职责
2015/02/10 职场文书
三方合作意向书范本
2015/05/09 职场文书
Python 绘制多因子柱状图
2022/05/11 Python