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在Web开发领域的优势
Oct 09 PHP
一个PHP+MSSQL分页的例子
Oct 09 PHP
第八节--访问方式
Nov 16 PHP
很好用的PHP数据库类
May 27 PHP
ThinkPHP采用模块和操作分析
Apr 18 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
Dec 02 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
PHP生成条形码大揭秘
Sep 24 PHP
Zend Framework教程之模型Model基本规则和使用方法
Mar 04 PHP
PHP实现对数组分页处理实例详解
Feb 07 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
PHP智能识别收货地址信息实例
Jan 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中截取字符串支持utf-8
2007/01/18 PHP
PHP 文件系统详解
2012/09/13 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
smarty中post用法实例
2014/11/28 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
VueJS全面解析
2016/11/10 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
详解react组件通讯方式(多种)
2020/05/06 Javascript
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
python中字符串内置函数的用法总结
2018/09/13 Python
详解Python做一个名片管理系统
2019/03/14 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
一道输出判断型Java面试题
2014/10/01 面试题
活动倡议书范文
2014/05/13 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
学术会议通知
2015/04/15 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL