小白一枚,如有错误,欢迎指出,我会尽快修改。
过程见这里:https://www.mmuaa.com/post-5.html
不多说,直接上代码。
<?php
/*
作者:@Kidultff
主页:https://www.mmuaa.com/
qzfl版本:v8_2.1.57
2017-1-31
转载或引用请保留作者信息
*/
class qzfl{
private $ck , $qzonetoken , $qq ;
public function __construct($ck , $qzonetoken , $qq) {
$this->ck = $ck;
$this->qzonetoken = $qzonetoken;
$this->qq = $qq;
}
private function Get_q_tk($p_key){
$arr=str_split($p_key);
$hash = 5381;
for ($i = 0, $len = strlen($p_key) ; $i < $len; ++$i) {
$hash += ($hash << 5) + base_convert(bin2hex(iconv('UTF-8', 'UCS-4', $arr[$i])), 16, 10);;
}
return $hash & 2147483647;
}
private function GetCkArr($ck){
$ck=preg_replace('# #', '', $ck);
$ck_arr=explode(";",$ck);
for($i=0,$len=count($ck_arr) ; $i<$len ; $i++){
$arr[strstr($ck_arr[$i],'=',true)]=str_replace("=","",strstr($ck_arr[$i],'='));
}
return $arr;
}
public function Send($content){
$p_skey=$this->GetCkArr($this->ck)['p_skey'];
$g_tk=$this->Get_q_tk($p_skey);
$url = "http://h5.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_publish_v6?g_tk=".$g_tk."&qzonetoken=".$this->qzonetoken;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIE, $this->ck);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array ('Referer:http://user.qzone.qq.com/'.$this->qq) );
curl_setopt($ch, CURLOPT_POSTFIELDS, "qzreferrer=http://user.qzone.qq.com/".$this->qq."&syn_tweet_verson=1¶mstr=1&pic_template=&richtype=&richval=&special_url=&subrichtype=&who=1&con=qm".$content."&feedversion=1&ver=1&ugc_right=1&to_sign=1&hostuin=".$this->qq."&code_version=1&format=fs");
$response = curl_exec($ch);
curl_close($ch);
$return = is_int(strpos($output,'请先登录'));
return $return;
}
}
使用方法举例:
首先获取qq空间的cookie(chrome浏览器F12控制台Console输入document.cookie即可看到)
然后获取qzonetoken(chrome浏览器F12控制台Console输入window.g_qzonetoken即可看到)
接着可以用如下方法使用类:
<?php
$qq={QQ号};
$ck={cookies};
$tk={qzonetoken};
$content={说说内容};
$qzone=new qzfl($ck,$tk,$qq);
$result=$qzone->Send($content);
这样,如果cookies有效,一条说说就发表到了QQ空间。
Cookies是否有效可以根据返回值$result判断。
swich($result){
case 0:echo "成功";break;
case 1:echo "cookie失效或昵称中包含"请先登录"";break;
}
本代码在2017.02亲测有效。如果失效了请留言
哥们这玩意没用了