您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
抖音网页端签名signature和X-Bogus生成
// ==UserScript== // @name JSON-Rpc-Demo // @namespace http://wslmf.com/ // @version 0.2 // @description 抖音网页端签名signature和X-Bogus生成 // @author Ripper // @match https://www.iesdouyin.com/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @license MIT // ==/UserScript== function Hlclient(wsURL) { this.wsURL = wsURL; this.handlers = {}; this.socket = {}; if (!wsURL) { throw new Error('wsURL can not be empty!!') } this.connect() } Hlclient.prototype.connect = function () { console.log('begin of connect to wsURL: ' + this.wsURL); var _this = this; try { this.socket["ySocket"] = new WebSocket(this.wsURL); this.socket["ySocket"].onmessage = function (e) { console.log("send func", e.data); _this.handlerRequest(e.data); } } catch (e) { console.log("connection failed,reconnect after 10s"); setTimeout(function () { _this.connect() }, 10000) } this.socket["ySocket"].onclose = function () { console.log("connection failed,reconnect after 10s"); setTimeout(function () { _this.connect() }, 10000) } }; Hlclient.prototype.send = function (msg) { this.socket["ySocket"].send(msg) } Hlclient.prototype.regAction = function (func_name, func) { if (typeof func_name !== 'string') { throw new Error("an func_name must be string"); } if (typeof func !== 'function') { throw new Error("must be function"); } console.log("register func_name: " + func_name); this.handlers[func_name] = func; } Hlclient.prototype.handlerRequest = function (requestJson) { var _this = this; var result=JSON.parse(requestJson); //console.log(result) if (!result['action']) { this.sendResult('','need request param {action}'); return } action=result["action"] var theHandler = this.handlers[action]; if (!theHandler ||theHandler==undefined){ this.sendResult(action,'action not found'); return } try { if (!result["param"]){ theHandler(function (response) { _this.sendResult(action, response); }) }else{ theHandler(function (response) { _this.sendResult(action, response); },result["param"]) } } catch (e) { console.log("error: " + e); _this.sendResult(action+e); } } Hlclient.prototype.sendResult = function (action, e) { let resultMessage = { action, data:e } this.send(JSON.stringify(resultMessage)); } var service = new Hlclient("wss://api.wslmf.com/websocket/jsrpc/xb/douyin"); service.regAction("sign", function (resolve, param) { var xhr = new XMLHttpRequest(); xhr.open('get', param, false); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.setRequestHeader('salute-by', 'douyin'); xhr.send(null); resolve(xhr.responseURL); })