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脚本的10个技巧(1)
Oct 09 PHP
php程序效率优化的一些策略小结
Jul 17 PHP
php中用于检测一个地理IP地址是否可用的代码
Feb 19 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
Jun 08 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
Nov 20 PHP
ZendFramework2连接数据库操作实例
Apr 18 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 PHP
详解PHP用mb_string处理windows中文字符
May 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
PHP 数组遍历顺序理解
2009/09/09 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
微信支付的开发流程详解
2016/09/13 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
Python常用模块用法分析
2014/09/08 Python
Python中关于字符串对象的一些基础知识
2015/04/08 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
介绍一下你对SOA的认识
2016/04/24 面试题
小学生秋游活动方案
2014/02/23 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
办公用品管理制度
2015/08/04 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP