在进行QQ相关内容的网络数据采集时,经常看到需要附带bkn参数的时候。
如
https://qun.qq.com/cgi-bin/qunwelcome/myinfo?callback=?&bkn=114713469
经过分析QQ的网页JS,找到了bkn参数的获取算法如下:
e.getCSRFToken = function() {
var t = e.cookie("skey");
if (t) {
for (var r = 5381, n = 0, o = t.length; o > n; ++n) r += (r << 5) + t.charAt(n).charCodeAt();
return this.CSRFToken = 2147483647 & r
}
其中skey参数为登录QQ后的Cookie中附带的参数。
根据上述的Javascript算法,可以将其转换为如下的vba代码:
Function GetBkn(ByVal sKey As String)
Dim sJS As String
sJS = " var t = '" & sKey & "';for (var r = 5381, n = 0, o = t.length; o > n; ++n) r += (r << 5) + t.charAt(n).charCodeAt();var bkn= 2147483647 & r "
Dim oHtml As Object
'定义HtmlDocument对象
Set oHtml = CreateObject("htmlfile")
Dim oWindow As Object
Set oWindow = oHtml.parentWindow
With oWindow
.execScript sJS
GetBkn = .bkn
End With
Set oWindow = Nothing
Set oHtml = Nothing
End Function
Sub QQ1722187970()
Dim sKey As String
sKey = "@GRqYzhxza"
Debug.Print GetBkn(sKey)
End Sub


发表评论