<?php
/*
*
* 作者:PHP中文网
* 类用途: 实现discuz2.5登陆发帖
*/
class discuz_post{
var $login_url;
var $post_login_array=array( );
var $post_url;
var $cookie_file;
public function get_formhash($login_url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $login_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);//print_r($contents);die;
curl_close($ch);
//正常发布的版本用如下方法可以获得登陆部分的formhash
preg_match('/<input type="hidden"name="formhash"value="(.*)"/>/isU', $contents, $matches);
//echo"<pre class="brush:php;toolbar:false">";
//print_r($matches);die;
if(!empty($matches)) {
$formhash = $matches[1];
} else {
// die('Not found the forumhash.');
}
return $formhash;
}
public function getcookie($login_url,$post){
$cookie_file = tempnam('./temp','cookie');
//print_r($cookie_file);die;
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_exec($ch);
curl_close($ch);
$this->cookie_file=$cookie_file;
return $cookie_file;
}
public function use_cookie($send_url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $send_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_file);
$contents = curl_exec($ch);
curl_close($ch);
//获得发帖页面的fromhash
preg_match_all('/<input type="hidden"name="formhash"id="formhash"value="(.*)"/>/isU',$contents,$matches);
if(!empty($matches)){
$formhash = $matches[1][0];
}else {
$formhash='';//没有
}
return $formhash;
}
public function post_newthread($send_url,$thread_data){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $send_url);
curl_setopt($ch, CURLOPT_REFERER, $send_url);//伪装REFERER
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_file);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $thread_data);
$contents = curl_exec($ch);
curl_close($ch);
return 1;
}
}
//下面是代码例子*******************************************************************************
$rc= new discuz_post();
//登陆的地址
$login_url='http://bbs.phpchina.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes';
$theformhash= $rc->get_formhash($login_url);
//登陆部分需要发送的数据,这里处理没有验证码的
$login_array=array(
'username'=>'用户名',
'password'=>'密码',
'referer'=>'http://bbs.phpchina.com/',
'questionid'=>0,
'answer'=>'',
'seccodeverify'=>'',
'formhash'=>$theformhash,//这个貌似没有也可以发帖滴
);
//获得cookie文件
$the_cookie_file= $rc->getcookie($login_url,$login_array);
$send_url ='http://bbs.phpchina.com/forum.php?mod=post&action=newthread&fid=2&infloat=yes';
$thesendformhash= $rc->use_cookie($send_url);//利用cookie文件的
$post_array=array(
'subject' =>"发帖,发帖测试",//标题
'message' =>"内容噢噢噢噢噢噢噢噢",//要超过10个字,奶奶的
'topicsubmit' =>"yes",
'extra' => '',
'tags' => 'Curl',//帖子标签
'formhash'=>$thesendformhash,
);
$rc->post_newthread($send_url,$post_array);//发了一贴
echo"<pre class="brush:php;toolbar:false">";
print_r($rc);
echo $theformhash;
echo $the_cookie_file;
echo $thesendformhash;
unlink($rc->cookie_file);//删除cookie文件,也可以不删除
echo"ok!";
?>
ログイン後にコピー