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中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
PHP合并两个数组的两种方式的异同
Sep 14 PHP
PHP中调用SVN命令更新网站方法
Jan 07 PHP
php上传文件常见问题总结
Feb 03 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 PHP
php通过执行CutyCapt命令实现网页截图的方法
Sep 30 PHP
php实现单笔转账到支付宝功能
Oct 09 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 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文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
php安装swoole扩展的方法
2015/03/19 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
js实现二级导航功能
2017/03/03 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
python实现的解析crontab配置文件代码
2014/06/30 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
python 网络爬虫初级实现代码
2016/02/27 Python
python实现二叉树的遍历
2017/12/11 Python
python 自动去除空行的实例
2018/07/24 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
对Django url的几种使用方式详解
2019/08/06 Python
大学生通用个人的自我评价
2014/02/10 职场文书
会计专业求职信
2014/08/10 职场文书
三好生演讲稿
2014/09/12 职场文书
交通事故代理词范文
2015/05/23 职场文书
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python