php模拟用户自动在qq空间发表文章的方法


Posted in PHP onJanuary 07, 2015

本文实例讲述了php模拟用户自动在qq空间发表文章的方法。分享给大家供大家参考。具体分析如下:

我们这里是一个简单的利用php来模拟登录后再到QQ空间发送文章的一个简单的程序,有需要的朋友可以参考,或改进可以给我意见,代码如下:

<?php 

//模拟get post请求函数 

/* 

函数说明: 

功能:请求方式可以get,post,可以发送的cookie,保存的cookiefile文件 

参数:$url-----请求url    $referer---来源url    $postdata----------用于post请求的数据,''为get请求 

$cookie---------发送的cookie     $cookiefile-----保存的cookiefile文件 

返回值:返回获取的源码 

*/ 

function request($url,$referer='',$postdata='',$cookie='',$cookiefile=''){ 

//header设置 

$header=''; 

$header.="Content-Type: application/x-www-form-urlencodedrn";//内容请求类型 

$header.="User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)rn";//浏览器字段 

$header.="Referer:".$referer."rn";//设置来源地址 

$header .= "Cookie:".$cookie ; //设置cookie,默认空 

//请求方法get post,通过$postdata空---get,非空----post 

if($postdata=='')$method='GET'; 

else $method='POST'; 

//定义用于创建流的数组 

$opts=array(); 

$opts['http']=array('method'=>$method,'header'=>$header,'content'=>$postdata); 

//生成流 

$context=stream_context_create($opts); 

//发送请求,获取源码 

$yuanma=file_get_contents($url,false,$context); 

//是否需要保存cookie到文件,$cookiefile不空时 

if($cookiefile!=''){ 

echo '需要保存cookie<br>'; 

//判断保存文件存在,不存在创建 

if(!file_exists($cookiefile)){ 

file_put_contents($cookiefile,''); 

} 

//获取cookie,保存起来 

$response=implode("rn",$http_response_header); 

//用正则匹配cookie 

$zengze="/Set-Cookie:(.*?)rn/"; 

preg_match_all($zengze,$response,$cookie_arr); 

//存在匹配,保存 

if(!emptyempty($cookie_arr[1])){ 

$cookiestr=implode(';',$cookie_arr[1]); 

file_put_contents($cookiefile,$cookiestr); 

echo '成功保存cookie<br>'; 

} 

else echo '没有匹配到cookie<br>'; 

}//end if($cookiefile!='') 

//返回源码 

return $yuanma; 

}//end function request($url,$referer,$postdata,$cookie,$cookiefile)  

//获得当前的脚本网址  

function GetCurUrl()  

{  

if(!emptyempty($_SERVER["REQUEST_URI"]))  

{  

$scriptName = $_SERVER["REQUEST_URI"];  

$nowurl = $scriptName;  

}  

else  

{  

$scriptName = $_SERVER["PHP_SELF"];  

if(emptyempty($_SERVER["QUERY_STRING"]))  

{  

$nowurl = $scriptName;  

}  

else  

{  

$nowurl = $scriptName."?".$_SERVER["QUERY_STRING"];  

}  

}  

return $nowurl;  

} 

 

//获得当前文件名 

$nowurl=GetCurUrl(); 

//echo $nowurl; 

 

//表单输出,没有提交时 

if(!isset($_POST['qq'])){ 

echo '<form method="post" action="'.$nowurl.'"> 

qq号码:<input type="text" name="qq"><br> 

g_tk:<input type="text" name="g_tk"><br> 

标题:<input type="text" name="title"><br> 

内容:<input type="text" name="content"><br> 

<input type="submit" value="发表文章"> 

</form>'; 

die(); 

} 

 

/* 

提交参数说明: 

$_POST['qq']---用户QQ 

$_POST['g_tk']--这个参数很关键,获得这个参数,需要抓下发表时提交的post地址后面调用的g_tk=123456789, 

路POST http://b1.qzone.qq.com/cgi-bin/blognew/blog_add?g_tk=123456789里的g_tk=123456789 

$_POST['title']---文章标题,不得空 

$_POST['content']---文章内容,不得空 

*/ 

 

header('Content-Type:text/html;charset=gb2312'); 

set_time_limit(0); 

//ob_end_clean(); 

//ob_start(); 

 

//获取cookie文件,不存在创建,并退出程序 

$cookiefile=dirname(__FILE__).'\qq_cookie.txt'; 

if(!file_exists($cookiefile)){ 

echo 'qq_cookie.txt不存在,自动创建,请填写抓包的cookie<br>'; 

file_put_contents($cookiefile,''); 

die('程序退出'); 

} 

//存在,读取cookie 

else{ 

$cookie=file_get_contents($cookiefile);//登录cookie 

//$cookie=urlencode($cookie); 

} 

//echo 'cookie:'.$cookie.'<br>'; 

 

//构成发表页,post数据等的重要信息 

//qq号码 

if(emptyempty($_POST['qq'])||preg_match('/[^0-9]/is',$_POST['qq']))die('qq号码有误,必须数字'); 

else $qq=$_POST['qq'];//qq号 

if(emptyempty($_POST['g_tk'])||preg_match('/[^0-9]/is',$_POST['g_tk']))die('post重要参数g_tk不合法,必须数字,请使用抓包的值'); 

$g_tk=$_POST['g_tk']; 

 

$title=emptyempty($_POST['title'])?die('标题不得空'):$_POST['title'];//文章标题 

$content=emptyempty($_POST['content'])?die('内容不得空'):$_POST['content'];//内容 

 

$category='个人日记';//分类 

$fabiao='http://b1.qzone.qq.com/cgi-bin/blognew/blog_add?g_tk='.$g_tk;//发表处理页 

$referer='http://ctc.qzs.qq.com/qzone/v5/toolpages/fp_gbk.html';//来源页 

$r1='http://user.qzone.qq.com/'.$qq.'/infocenter';//列表访问来源页 

$postdata='uin='.$qq.'&category='.urlencode($category).'&title='.urlencode($title).'&content='.urlencode($content).'&html='.urlencode('<div class="blog_details_20110920">'.$content.'</div>').'&tweetflag=0&cb_autograph=1&topflag=0&needfeed=0&g_tk='.$g_tk.'&_fp_refer=http%3A%2F%2Fctc.qzs.qq.com%2Fqzone%2Fnewblog%2Fv5%2Feditor.html%3Fsource%3D1%7Chttp%3A%2F%2Fctc.qzs.qq.com%2Fqzone%2Fnewblog%2Fv5%2Feditor.html%3Fsource%3D1%3Chttp%3A%2F%2Fuser.qzone.qq.com%2F'.$qq.'%2Fmain';//post数据 

//$postdata=urlencode($postdata); 

//echo $postdata; 

//发送请求,获取源码 

$yuanma=request($fabiao,$r1,$postdata,$cookie,''); 

if(strpos($yuanma,'发表成功'))echo $title.'  发表成功<br>'; 

else echo '发表失败:右键查看源码,可以看到具体错误'.$yuanma; 

?>

php脚本:注意需要保存命名随意已经自动识别,我是命名为qq_fabiao.php,然后设置提交地址,cookie文件qq_cookie.txt需要填写抓包获取的空间登录cookie,以通过登录验证,qq_cookie.txt与php文件同目录.

提交参数说明:

$_POST['qq']---用户QQ

$_POST['g_tk']--这个参数很关键,获得这个参数,需要抓下发表时提交的post地址后面调用的g_tk=123456789,POST http://b1.qzone.qq.com/cgi-bin/blognew/blog_add?g_tk=123456789里的g_tk=123456789

$_POST['title']---文章标题,不得空

$_POST['content']---文章内容,不得空

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
菜鸟学PHP之Smarty入门
Jan 04 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
CI框架中cookie的操作方法分析
Dec 12 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
Oct 23 PHP
thinkphp配置文件路径的实现方法
Aug 30 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
php基于dom实现的图书xml格式数据示例
Feb 03 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP中使用CURL获取页面title例子
Jan 07 #PHP
PHP中调用SVN命令更新网站方法
Jan 07 #PHP
PHP PDO fetch 模式各种参数的输出结果一览
Jan 07 #PHP
PHP中使用php5-ffmpeg撷取视频图片实例
Jan 07 #PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 #PHP
PHP实现的简易版图片相似度比较
Jan 07 #PHP
PHP中使用SimpleXML检查XML文件结构实例
Jan 07 #PHP
You might like
php加密解密实用类分享
2014/01/07 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
python中的reduce内建函数使用方法指南
2014/08/31 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
C#怎么让一个窗口居中显示?
2015/10/20 面试题
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
服务员岗位职责范本
2015/04/09 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android