求PHP后台POST数据源码

huamaolin 2009-11-12 01:11:08
功能:

后台登陆某DISCUZ7.0 论坛用后台POST进行发帖

有会的、做过的朋友贴代码

能解决问题的另外开帖送200分
<?php    
// @author PHP-Fish
// @contact 51PHP.Net
// @describe curl登录discuz论坛

$ch = curl_init();

$url = 'http://www.discuz.net/logging.php?action=login&loginsubmit=yes';

$referer = 'http://www.discuz.net/logging.php?action=login'; //伪装页面来源


curl_setopt($ch, CURLOPT_URL, $referer); //打开地址,获取随机hash码
ob_start();
curl_exec($ch);
$content = ob_get_contents();
ob_end_clean();
curl_close($ch);


$ch = curl_init();
$preg_1 = '/<input type="hidden" name="formhash" value="(.*?)" \/>/';
preg_match($preg_1, $content, $arr_match);
$hash = $arr_match['1']; //隐藏传递的hash字符串;

$arr_post = array();
$arr_post['formhash'] = $hash;
$arr_post['loginfield'] = 'username';
$arr_post['username'] = '******'; //您的论坛用户名;
$arr_post['password'] = '******'; //论坛密码
$arr_post['questionid'] = 0;
$arr_post['answer'] = '';
//$arr_post['cookietime'] = 2592000;
$arr_post['loginsubmit'] = true;

curl_setopt($ch, CURLOPT_URL, $url); //设置需要提交的url地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置为字符串方式

curl_setopt($ch, CURLOPT_COOKIEJAR, '/cookie.txt'); //存储cookie(文件要设置为777)
curl_setopt($ch, CURLOPT_HEADER, false); //禁止头部信息
curl_setopt($ch, CURLOPT_NOBODY,true); //显示页面内容
curl_setopt($ch, CURLOPT_POST, true); //POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $arr_post); //POST数据
curl_setopt($ch, CURLOPT_REFERFER, $referer); //伪装REFERER

curl_exec($ch);
curl_close($ch);

$ch = curl_init();

$md = 'http://www.discuz.net/pm.php';
curl_setopt($ch, CURLOPT_URL, $md); //需要显示的页面
curl_setopt($ch, CURLOPT_COOKIEFILE, '/cookie.txt'); //传递COOKIE
curl_exec($ch);
curl_close($ch);



有没有人帮忙测试下是否可用
...全文
1865 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
panjjo 2010-11-09
  • 打赏
  • 举报
回复
0.0,php,很长时间没有搞了~~
yangcong555 2010-06-02
  • 打赏
  • 举报
回复
<?php
include 'Snoopy.class.php';
include 'page.php';
set_time_limit(0);
class curl
{
var $cookiePath = '';
var $loginUrl = '';
var $data = array();//data
var $destUrl = '';//dest url
public $sourceUrlContents = '';
protected $destUrlContents = '';
protected $referer;//source url
protected $postData = '';//post data
protected $domain;//domain
function __construct()
{
$this->cookiePath = tempnam('./tmp','cookie');
}

function joinData()
{
$postData = array();
if(is_array($this->data) || sizeof(get_object_vars($this->data)) > 0)
{
foreach ($this->data as $i => $v)
{
$v = urlencode($v);
$postData []= "{$i}={$v}";
}
}
if(is_array($postData))
{
$this->postData = join('&', $postData);
}
}
//set referer
function setReferer($referer = '')
{
if($referer == '')
{
$this->referer = $this->domain;
}else{
$this->referer = $referer;
}
}
//set dest url
function setDestUrl($url = '')
{
if($url == '')
{
$this->destUrl = $this->domain;
}else{
$this->destUrl = $url;
}
}
//get hidden contents
function getHidden($fileds = 'formhash')
{
$contents = @file_get_contents($this->loginUrl);
if($contents)
{
$exp_match = "/<input type=\"hidden\" name=\"formhash\" value=\"(.*)\" \/>/";
preg_match_all($exp_match, $contents, $match);
return ($match[1][0]);
}else{
return ;
}
}
//post data
function curlPost()
{

$this->domain = $this->getHost($this->loginUrl);
$curl = curl_init();

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$this->joinData();
//post data to point url
curl_setopt($curl,CURLOPT_URL, $this->loginUrl);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $this->postData);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_COOKIEJAR,$this->cookiePath);
curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookiePath);
curl_setopt($curl,CURLOPT_REFERER, $this->referer);
curl_setopt($curl,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, true);//获取header信息
//设定是否输出页面内容
curl_setopt($curl, CURLOPT_NOBODY, false);
$this->sourceUrlContents = curl_exec($curl);
curl_close($curl);
unset($curl);
}
//fetch destiny url
function fetchUrl($destUrl = 'http://hi.baidu.com/')
{
$this->destUrl = $destUrl;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $destUrl);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIEJAR, $this->cookiePath);
curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookiePath);
$this->destUrlContents = curl_exec($curl);
curl_close($curl);
unset($curl);
return $this->destUrlContents;
}
//get host by url
function getHost($url)
{
$urlArray = parse_url($url);
return 'http://' . $urlArray['host'];
}
function templates ($title = 'Debug information', $msg)
{
return <<<EOF
<fieldset id="fld_deubg" style="padding:10px;">
<legend>{$title}</legend>
<div id="deubg">{$msg}</div>
</fieldset>
EOF;
}

//debug information
function debug($debugType = 'cookie')
{
switch ($debugType)
{
case 'cookie':
return $this->templates('Cookie information', '<pre>' . file_get_contents($this->cookiePath) . '</pre>');
break;
case 'source':
return $this->templates('Source information', $this->sourceUrlContents);
break;
case 'dest':
return $this->templates('Dest information', $this->destUrlContents);
break;
case 'data':
return $this->templates('Post data', $this->postData);
break;
case 'url':
return $this->templates('<p>Url infomation', 'Login url' . $this->loginUrl . '</p><p>' . $this->destUrl . '</p><p>' . $this->referer . '</p>');
}
}//end function
}
$curl = new curl();
$curl->loginUrl ='http://my.39.net/login.aspx';
$userInfo = new stdClass();
$userInfo->agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3';
$userInfo->uname = 'qingxrong';
$userInfo->pwd = 'qingrong';
$userInfo->Host='ask.39.net';
$userInfo->submit = '登录';
$userInfo->action = 'login';
$userInfo->ref = '';
//$userInfo->referer = 'http://ask.39.net/';
$curl->data = $userInfo;
$curl->curlPost();
$urll='http://bbs.39.net/by/forum/371-1-3.html';
$pop='http://bbs.39.net';
$sn=new Snoopy;
$sn->fetch($urll);
$rn=$sn->results;
$zhen='/<a.*?href=\"\/by\/topic\/.*?\.html" .*?>([\s\S].*?)<\/a>/';
$zhen2='/<a.*?href=\"(\/by\/topic\/.*?\.html)" .*?>[\s\S].*?<\/a>/';
preg_match_all($zhen,$rn,$all);
preg_match_all($zhen2,$rn,$all2);




//print_r($all[1]);
//print_r($all2[1]);
//echo sizeof($all[0]);
/*
$sum=count($all2);
$contents=$sum-1;
$num=$_GET[num];//处理条数
$content=$_COOKIE[content];//当前记录
if($num=='')
{
$num=1;
}
if($content=='')
{
$content=0;
}
*/
$sum=count($all2[1]);
//echo $sum;
$page=new page(array('total'=>$sum,'perpage'=>1));
echo $page->show();
if($_GET['PB_page']=='')
{
$_GET['PB_page']=1;
}
$num=$_GET['PB_page']-1;
//echo $num;

//echo $sm;
$sm= $pop.$all2[1][$_GET['PB_page']];
$zhen3='/http:\/\/bbs.39.net\/by\/topic\/(.*?)\.html/';
preg_match_all($zhen3,$sm,$q);
//print_r( $q[1][0]);
//echo '<br>'.$sm;
if($_GET['PB_page']>$sum)
{
print "处理完成,共处理".($num)."条记录!";
print "<a href='untitled.php'>重来</a>";
exit;
}
else
{
if($_POST['submit'])
{

//print_r($q[1][$content]);
print "当前发送第".$num."条记录<br>处理网址为.".$q[1][0]."<b style=\"color:red;\">".$all[1][$num]."</b><br/>".$_POST['content'];
$userI = new stdClass();
$userI->agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3';
$userI->tid = $q[1][0];

$userI->body=$_POST['content'];
$curl->loginUrl ='http://bbs.39.net/web/topic.asmx/addreplynew';
$curl->data = $userI;
$curl->curlPost();
}


}





/*


//===========================================================



/*
http://bbs.39.net/by/topic/1241495.html 这个页面看效果
*/

?>
<?php
$num=$_GET['PB_page']-1;
?>
<form action="" method="post" name="frmpost">

<div>标题:<input type="text" name="title" style="width:670px" value=" <?php print $all[1][$num];?>"/></div>
<div> <textarea cols="100" rows="10" name='content' ></textarea></div>
<div>发送后测试是否成功的网址:<input type="text" name='links' style="width:510px" value="<?php print $sm;?>"/></div>
<div style="float:right; width:820px;">

<input type="submit" name="submit" value="登陆" /> </div>
</form>



tony-杨 2009-11-13
  • 打赏
  • 举报
回复
模拟POST提交?
ruanchao 2009-11-13
  • 打赏
  • 举报
回复
没有弄明白你发贴的意图, 你要用DISCUZ7.0做吗?有什么需求呢?
huamaolin 2009-11-12
  • 打赏
  • 举报
回复
 <?php





//初始化
$tread = array(

'root' => 'http://www.ly5s.com/bbs/index.php',

'login'=> 'logging.php?action=login',

'username'=>'烈焰灬林',

'password'=>'273319572',

'link'=>'http://www.ly5s.com/bbs/post.php?action=newthread&fid=13&extra=page%3D1', //这个地址可以在你要发帖的板块点击发帖,则地址栏的地址就是

'typeid'=>0, //有的板块需要typeid

'subject'=>'发帖标题',

'content'=>'发帖内容',

);
$tread['login'] = $tread['root'] . $tread['login'];

//进行登陆

$cookie_jar = tempnam('./tmp','cookie');//获取登陆后的cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $tread['login']); //打开地址,获取随机hash码
ob_start();
curl_exec($ch);
$content = ob_get_contents();
ob_end_clean();
curl_close($ch);
$ch = curl_init();
$preg_1 = '/<input type="hidden" name="formhash" value="(.*?)" \/>/';
preg_match($preg_1, $content, $arr_match);
$hash = $arr_match['1']; //隐藏传递的hash字符串;

$request = "username={$tread[username]}&password={$tread[password]}&formhash={$hash}&loginsubmit=提交";
curl_setopt($ch, CURLOPT_URL, $tread['login']); //设置需要提交的url地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置为字符串方式

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); //存储cookie(文件要设置为777)
curl_setopt($ch, CURLOPT_HEADER, false); //禁止头部信息
curl_setopt($ch, CURLOPT_NOBODY,true); //显示页面内容
curl_setopt($ch, CURLOPT_POST, true); //POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $request); //POST数据
//curl_setopt($ch, CURLOPT_REFERFER, $referer); //伪装REFERER
curl_exec($ch);
curl_close($ch);


$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $tread['link']); //打开地址,获取随机hash码
ob_start();
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar); //存储cookie(文件要设置为777)
curl_exec($ch);
$content = ob_get_contents();
ob_end_clean();
$preg_1 = '/<input type="hidden" name="formhash" id="formhash" value="(.*?)" \/>/';
//$preg_1 = '/<input type="hidden" name="formhash" value="(.*?)" \/>/';
preg_match($preg_1, $content, $arr_match);
$hash = $arr_match['1']; //隐藏传递的hash字符串;

$referer = $tread['link'];
$tread['link'] .= "&formhash={$hash}";
$request = "subject={$tread['subject']}&message={$tread['content']}&typeid={$tread[typeid]}&topicsubmit=yes&replysubmit=yes";
curl_setopt($ch, CURLOPT_URL, $tread['link']); //设置需要提交的url地址
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar); //存储cookie(文件要设置为777)
curl_setopt($ch, CURLOPT_HEADER, false); //禁止头部信息
curl_setopt($ch, CURLOPT_NOBODY,true); //显示页面内容
curl_setopt($ch, CURLOPT_POST, true); //POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $request); //POST数据
curl_setopt($ch, CURLOPT_REFERER, $referer); //伪装REFERER
curl_exec($ch);
curl_close($ch);


}

?>


有错误啊

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧