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中利用XML技术构造远程服务(下)
Oct 09 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
php下载文件的代码示例
Jun 29 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 PHP
php上传文件并存储到mysql数据库的方法
Mar 16 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 PHP
PHP unset函数原理及使用方法解析
Aug 14 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
实用函数3
2007/11/08 PHP
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
基于jquery的$.ajax async使用
2011/10/19 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
python的常见命令注入威胁
2013/02/18 Python
Python实现的检测网站挂马程序
2014/11/30 Python
python类装饰器用法实例
2015/06/04 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
python实现126邮箱发送邮件
2020/05/20 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
建筑系毕业生自我鉴定
2014/01/24 职场文书
职业生涯规划书前言
2014/04/15 职场文书
根叔历年演讲稿
2014/05/20 职场文书
教师个人自我评价
2015/03/04 职场文书
初中语文教学研修日志
2015/11/13 职场文书
速龙x4-860k处理器相当于i几
2022/04/20 数码科技
Redis全局ID生成器的实现
2022/06/05 Redis