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 相关文章推荐
深入了解php4(2)--重访过去
Oct 09 PHP
PHP如何编写易读的代码
Jul 10 PHP
PHP 数据库树的遍历方法
Feb 06 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
将时间以距今多久的形式表示,PHP,js双版本
Sep 25 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
php中的mongodb select常用操作代码示例
Sep 06 PHP
PHP实现操作redis的封装类完整实例
Nov 14 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 PHP
php如何实现数据库的备份和恢复
Nov 30 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
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
详解PHP队列的实现
2019/03/14 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
跟老齐学Python之再深点,更懂list
2014/09/20 Python
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
Python程序控制语句用法实例分析
2020/01/14 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
python判断元素是否存在的实例方法
2020/09/24 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
园林技术个人的自我评价
2014/02/15 职场文书
经理任命书模板
2014/06/06 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
趣味运动会加油词
2015/07/18 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android