PHP利用Qzone的说说接口发表说说开发日记

发布于 / PHP / Comments Off on PHP利用Qzone的说说接口发表说说开发日记

通过Chrome控制台可以发现Qzone的说说发表接口如下

此接口采用POST请求方式发送数据,GET请求参数含有鉴权密钥,使用cookie来鉴别用户身份信息,接下来从这两方面下手。

 

通过分析Qzone首页的源代码,g_tk的算法存在于qzfl_v8_2.1.57.js中。

GET请求中,g_tk和qzonetoken字符串的算法,观察上面的js可知,g_tk是由一个QZFL.pluginsDefine.getACSRFToken()的函数,算法如下

用php运算,就是

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; 
}

OK,解决了q_tk的算法,接下来研究qzonetoken的算法。

看上图,是不是感觉有种被戏弄了的感觉。。。。密钥在一个script标签里!WTF???

好了,得到了以上的算法,我们写一个php程序,代码如下:(这里的密钥和cookie等隐私部分我就不写了)

$content="PHP发表测试";
$url = "http://h5.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_publish_v6?".$gt;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIE, $ck); 
curl_setopt ($ch, CURLOPT_HTTPHEADER, array ('Referer:http://user.qzone.qq.com/'.$qq) );
curl_setopt($ch, CURLOPT_POSTFIELDS, "qzreferrer=http://user.qzone.qq.com/".$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=".$qq."&code_version=1&format=fs");
$response = curl_exec($ch);
curl_close($ch);
echo $response;

在浏览器运行,结果

成功~

Qzone说说接口总结:

1,地址:http://h5.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_publish_v6?q_tk=[getACSRFToken()]&qzonetoken=[token]

2,请求方式:GET请求如上。POST请求

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=".$qq."&code_version=1&format=fs

其中$content和$qq为说说内容和QQ号。

 

转载原创文章请注明,转载自: 斐斐のBlog » PHP利用Qzone的说说接口发表说说开发日记
评论已关闭