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 相关文章推荐
PHP5 安装方法
Oct 09 PHP
php时间不正确的解决方法
Apr 09 PHP
windows下开发并编译PHP扩展的方法
Mar 18 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 PHP
php实现图片以base64显示的方法
Oct 13 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 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
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP 七大优势分析
2009/06/23 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
javascript控制台详解
2015/06/25 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
浅谈高大上的微信小程序中渲染html内容—技术分享
2018/10/25 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
Python pickle模块用法实例
2015/04/14 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
Python实现上下文管理器的方法
2020/08/07 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
Linux如何压缩可执行文件
2013/10/21 面试题
教育局长自荐信范文
2013/12/22 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
学校宣传标语
2014/06/18 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
学生检讨书范文
2014/10/30 职场文书
社区工作者个人总结
2015/02/28 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL
Java 定时任务技术趋势简介
2022/05/04 Java/Android