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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
header导出Excel应用示例
Jan 24 PHP
PHP中的Memcache详解
Apr 05 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
php微信开发之图片回复功能
Jun 14 PHP
php7 图形用户界面GUI 开发示例
Feb 22 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 explode()函数用法、切分字符串
2012/10/03 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
Python lambda和Python def区别分析
2014/11/30 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
python制作简单五子棋游戏
2019/06/18 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
中国旅游网站:途牛旅游网
2019/09/29 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
JAVA代码查错题
2014/10/10 面试题
自我鉴定书范文
2013/10/02 职场文书
同居协议书范本
2014/04/23 职场文书
爱心活动计划书
2014/04/26 职场文书
商业用房租赁协议书
2014/10/13 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android