PHP模拟用户登录发帖,php 应用curl模仿登录discuz以及模仿发帖

¥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(//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(//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);

?>容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值