当我们想要使用PHP进行QQ空间说说模拟发送时,在提交的URL中,我们会看到2个参数,其中一个就是Qzonetoken
链接如下:
https://user.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_publish_v6?qzonetoken=43056762050dbe39e22d4a84e549d67be7024dae6e1791ec223e5c389c4b3f07f99db9fd98c093be&g_tk=855649491
有了上面那两个黑黑的参数,说说才能发送出去(本篇文章只说明Qzonetoken的获取方式)
首先,我们要知道这个参数是怎么生成的,是不是跟g_tk一样是js生成的呢?
。。。。。。(过程略)
经过一番寻找,发现这个参数是在html的源代码里
window.g_qzonetoken = (function(){ try{return "2400408cddd3602b526ce916f2b2931c984ef581d14a5f54d3c1369c2f44f04671260b8e0a5c84df";} catch(e) {var xhr = new XMLHttpRequest();xhr.withCredentials = true;xhr.open('post', '//h5.qzone.qq.com/log/post/error/qzonetoken', true);xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');xhr.send(e);}})();
每刷新一次页面该参数会生成一次,你可以在提交URL时,只使用一个qzonetoken,这样也可以发送出去,但仅仅只能一个QQ号使用,因此还是想想怎么获取吧。。
我们模拟发送说说,就需要带上对应的cookie。我通过枚举法得到了访问QQ空间所需要的cookie,分别是:skey,p_skey,uin
所以,我们在模拟发送说说时,先从QQ空间的html源代码中,将qzonetoken筛选出来,然后再进行模拟说说发送,这样就能成功了。
是不是感觉很草率。。但这个参数好像真的不是js生成的,所以只有这一种办法了。。如果有大佬了解,可以在评论区留言 (╯‵□′)╯︵┴─┴
附上php代码
<?php
function getQtk($skey,$pskey,$uin){
$cookie="skey=".$skey.";p_skey=".$pskey.";uin=o".$uin.";p_uin=o".$uin;
$url="https://h5.qzone.qq.com/mqzone/profile?hostuin=$uin&no_topbar=1&srctype=10&stat=&g_f=2000000209";
$host=array('X-FORWARDED-FOR:49.130.128.221','CLIENT-IP:49.130.128.221');
$ua='Mozilla/5.0 (Linux; Android 9; MI 8 SE Build/PKQ1.181121.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36';
$curl = curl_init();//初始化curl
curl_setopt($curl, CURLOPT_URL,$url);//访问的url
$httpheader[] = "Accept:application/json";
$httpheader[] = "Accept-Encoding:gzip,deflate,sdch";
$httpheader[] = "Accept-Language:zh-CN,zh;q=0.8";
curl_setopt($curl, CURLOPT_HTTPHEADER, $httpheader);
curl_setopt($curl, CURLOPT_HTTPHEADER, $host);//指定host
curl_setopt($curl, CURLOPT_COOKIE,$cookie);//发送cookie
curl_setopt($curl, CURLOPT_REFERER, "h5.qzone.qq.com/mqzone/index");
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);//获取的信息以文件流的方式
curl_setopt($curl, CURLOPT_USERAGENT, $ua);//设置UA
$a=curl_exec($curl);//执行curl;
curl_close($curl); // 关闭CURL会话
$tk=strstr($a,"try{return");
$tk=strstr($tk,'";',true);
return substr($tk,12);
}
?>