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实现查询百度google收录情况(示例代码)
Aug 02 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
PHP错误和异长常处理总结
Mar 06 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
Yii2隐藏frontend/web和backend/web的方法
Dec 12 PHP
PHP实现的oracle分页函数实例
Jan 25 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
php模式设计之观察者模式应用实例分析
Sep 25 PHP
laravel-admin 实现给grid的列添加行数序号的方法
Oct 08 PHP
phpfpm的作用和用法
Oct 10 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
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
php实现短信发送代码
2015/07/05 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
phpwind放自动注册方法
2006/12/02 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
vue实现购物车案例
2020/05/30 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Python构建网页爬虫原理分析
2017/12/19 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
八年级数学教学反思
2014/01/31 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
毕业生自荐信范文
2015/03/05 职场文书
公司费用报销管理制度
2015/08/04 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python
四十九个javascript小知识实用技巧
2021/11/20 Javascript
vue elementUI表格控制对应列
2022/04/13 Vue.js