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 相关文章推荐
mysql limit查询优化分析
Nov 12 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
PHP使用递归生成文章树
Apr 21 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
May 16 PHP
PHPExcel简单读取excel文件示例
May 26 PHP
PHP实现JS中escape与unescape的方法
Jul 11 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 PHP
yii框架使用分页的方法分析
Jul 25 PHP
ThinkPHP 5.x远程命令执行漏洞复现
Sep 23 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
php 购物车的例子
2009/05/04 PHP
php 小乘法表实现代码
2009/07/16 PHP
php中转义mysql语句的实现代码
2011/06/24 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
Yii框架安装简明教程
2020/05/15 PHP
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python组合无重复三位数的实例
2018/11/13 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
争论的故事教学反思
2014/02/06 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
导师就业推荐信范文
2014/05/22 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
辞职信怎么写
2015/02/27 职场文书
入党自荐书范文
2015/03/05 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
《詹天佑》教学反思
2016/02/20 职场文书