php通过curl模拟登陆DZ论坛


Posted in PHP onMay 11, 2015

libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

<?php 
$discuz_url = 'https://3water.com/';//论坛地址 
$login_url = $discuz_url .'login.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边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 PHP
解析MySql与Java的时间类型
Jun 22 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
Feb 13 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
php实现计数器方法小结
Jan 05 PHP
Yii2.0表关联查询实例分析
Jul 18 PHP
apache php mysql开发环境安装教程
Jul 28 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
PHP中的魔术方法总结和使用实例
May 11 #PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 #PHP
PHP SPL标准库中的常用函数介绍
May 11 #PHP
PHP中的类型约束介绍
May 11 #PHP
PHP SPL标准库之接口(Interface)详解
May 11 #PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 #PHP
PHP设计模式之适配器模式代码实例
May 11 #PHP
You might like
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
PHP对称加密函数实现数据的加密解密
2016/10/27 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
jquery 问答知识整理
2010/02/11 Javascript
基于jquery的滚动新闻列表
2010/06/19 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
详解vue项目构建与实战
2017/06/27 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
zbar解码二维码和条形码示例
2014/02/07 Python
Python中的自定义函数学习笔记
2014/09/23 Python
python实现在sqlite动态创建表的方法
2015/05/08 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
tensorflow多维张量计算实例
2020/02/11 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
公司薪酬管理制度
2014/01/31 职场文书
冬季施工防火方案
2014/05/17 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
2014年稽查工作总结
2014/12/20 职场文书
毕业生党员个人总结
2015/02/14 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android