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 相关文章推荐
教你如何把一篇文章按要求分段
Oct 09 PHP
php intval的测试代码发现问题
Jul 27 PHP
利用php递归实现无限分类 格式化数组的详解
Jun 08 PHP
PHP的curl实现get,post和cookie(实例介绍)
Jun 17 PHP
json的键名为数字时的调用方式(示例代码)
Nov 15 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
ThinkPHP中order()使用方法详解
Apr 19 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 PHP
php实现简易计算器
Aug 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 不同编码下的字符串长度区分
2009/09/26 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
python3射线法判断点是否在多边形内
2019/06/28 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
在python中使用nohup命令说明
2020/04/16 Python
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
文员自我评价怎么写
2013/09/19 职场文书
会计自我鉴定范文
2013/10/06 职场文书
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
小学生新年寄语
2014/04/03 职场文书
连锁超市项目计划书
2014/09/15 职场文书
团代会开幕词
2015/01/28 职场文书
详解MySQL中的主键与事务
2021/05/27 MySQL
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技