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 相关文章推荐
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 PHP
php生成随机数或者字符串的代码
Sep 05 PHP
php 向访客和爬虫显示不同的内容
Nov 09 PHP
PHP 递归效率分析
Nov 24 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
php读取纯真ip数据库使用示例
Jan 26 PHP
php实现的Cookies操作类实例
Sep 24 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 PHP
php利用ZipArchive类操作文件的实例
Jan 21 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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 Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
js切换光标示例代码
2013/10/10 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
详解python单例模式与metaclass
2016/01/15 Python
基于python的字节编译详解
2017/09/20 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
python openssl模块安装及用法
2020/12/06 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
促销活动策划方案
2014/01/12 职场文书
师德个人剖析材料
2014/02/02 职场文书
安全标准化实施方案
2014/02/20 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
Mysql数据库命令大全
2021/05/26 MySQL
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js
浅析JavaScript中的变量提升
2022/06/01 Javascript