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 相关文章推荐
织梦模板标记简介
Mar 11 PHP
php基础学习之变量的使用
Jun 09 PHP
php删除数组元素示例分享
Feb 17 PHP
php导出excel格式数据问题
Mar 11 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
laravel安装zend opcache加速器教程
Mar 02 PHP
PHP自动生成表单代码分享
Jun 19 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 PHP
PHP数组访问常用方法解析
Sep 05 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 调试工具Debug Tools
2011/04/30 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
js下获取div中的数据的原理分析
2010/04/07 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
jQuery实现的调整表格行tr上下顺序
2016/01/10 Javascript
ionic组件ion-tabs选项卡切换效果实例
2016/08/27 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
python 控制语句
2011/11/03 Python
python中的多重继承实例讲解
2014/09/28 Python
Python的类实例属性访问规则探讨
2015/01/30 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
jupyter notebook 重装教程
2020/04/16 Python
浅析Python 序列化与反序列化
2020/08/05 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
Delphi CS笔试题
2014/01/04 面试题
学生党支部先进事迹
2014/02/04 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
党的群众路线学习材料
2014/05/16 职场文书
提拔干部考察材料
2014/05/26 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
个人承诺书格式范文
2015/04/29 职场文书