<?php
$discuz_url = 'http://127.0.0.1/discuz/';//论坛地址
$login_url = $discuz_url .'logging.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来模拟登录Discuz! 2.0论坛系统,然后在成功登录后发布一个新的帖子。以下是一些关于这个过程的关键知识点: 1. **Discuz! 2.0论坛系统**:Discuz! 是一个流行的开源社区论坛...
php的curl真的是相当好用,网上一搜索相关文章都是关于curl模拟登陆的,很少人提供模拟discuz发贴的源码。 复制代码 代码如下: <?php $discuz_url = ‘http://127.0.0.1/discuz/’;//论坛地址 $login_url = $...
下面是一个简化的PHP通过CURL模拟登录DZ论坛的示例步骤: 1. 设置论坛地址以及登录页面地址。 2. 准备POST数据,包括用户名、密码等。 3. 初始化CURL会话,并设置CURL选项,如请求方式为POST,发送POST字段。 4. ...
在网上下载了一个模拟登陆discuz论坛的php程序范例,试运行时出现“Call to undefined function curl_init”这个错误提示,没有定义的函数,也就是php还没打开对curl_init函数的支持。Google了一番终于解决了,方法...
总的来说,这款基于PHP的众大一键采集今日头条的Discuz插件涉及到的知识点包括:PHP编程、Web Scraping技术、HTTP请求与响应处理、HTML和JSON数据解析、Discuz论坛API的使用,以及可能的反反爬虫策略。对于想要深入...
在示例代码中,使用了curl_setopt函数来模拟一个wap登录和discuz论坛的wap登录。代码首先通过curl_init初始化一个cURL会话,然后逐一设置URL、POST请求、请求头、POST字段等选项。最后通过curl_exec执行这个cURL会话...
举一个curl模拟登录discuz论坛的例子,我们首先需要配置请求的URL、POST字段以及提交的数据。在这个过程中,需要根据目标网站的具体表单元素来构造正确的POST数据,并在请求中附上cookie来保持会话。 以上是使用...
02-curl模拟登陆discuz论坛 03-curl模拟登陆zabbix web界面 04-zabbix web场景监控 05-监控维度讲解 06-percona插件监控mysql 07-snmp监控windows和linux 08-zabbix自动化监控之自动发现和自动注册 09-zabbix主动...
【标题】"基于PHP的DZ php论坛万能爬虫程序.zip" 提供的是一个用PHP编写的专门针对DZ(Discuz!)论坛的通用爬虫程序。DZ论坛是中国较受欢迎的开源社区论坛软件,它使用PHP和MySQL数据库构建,具有丰富的功能和高度的...
│ 27 01-使用curl模拟登陆zabbix-web页面.mp4 │ 28 02-zabbix创建web场景监控.mp4 │ 29 03-创建web检查触发器.mp4 │ 30 04-使用percona插件监控mysql.mp4 │ 31 05-使用snmp监控linux系统.mp4 │ 32 06-使用自动...
这一过程涉及到网络请求、HTML解析、DOM操作等技术,其中可能需要用到如cURL库来处理HTTP请求,以及PHP的DOM或SimpleXML扩展来解析HTML内容。 在使用数据采集程序时,需要注意合法性和道德问题。确保你的行为符合...