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 13 PHP
php实例分享之二维数组排序
May 15 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
ThinkPHP空模块和空操作详解
Jun 30 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
PHP基于MySQL数据库实现对象持久层的方法
Jun 17 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
PHP操作Redis常用技巧总结
Apr 24 PHP
PHP PDOStatement::fetchObject讲解
Feb 01 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读取数据库信息的几种方法
2008/05/24 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
js实现随机点名小功能
2017/08/17 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
python通过线程实现定时器timer的方法
2015/03/16 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
python协程之动态添加任务的方法
2019/02/19 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
python实现人脸签到系统
2020/04/13 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
北京大学自荐信范文
2014/01/28 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
2014年预备党员群众路线教育实践活动对照检查材料思想汇报
2014/10/02 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
2014年纪检工作总结
2014/11/12 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript