首页 > 其他分享 >b站直播间 ws协议爬取

b站直播间 ws协议爬取

时间:2023-11-11 22:44:37浏览次数:27  
标签:直播间 bytes value 爬取 ws && offset var new

挺简单的

let {brotliDecompressSync} = require("zlib");
var wsBinaryHeaderList = [{
    "name": "Header Length",
    "key": "headerLen",
    "bytes": 2,
    "offset": 4,
    "value": 16
}, {"name": "Protocol Version", "key": "ver", "bytes": 2, "offset": 6, "value": 1}, {
    "name": "Operation",
    "key": "op",
    "bytes": 4,
    "offset": 8,
    "value": 1
}, {"name": "Sequence Id", "key": "seq", "bytes": 4, "offset": 12, "value": 1}];

function mergeArrayBuffer(t, e) {
    var n = new Uint8Array(t)
        , o = new Uint8Array(e)
        , i = new Uint8Array(n.byteLength + o.byteLength);
    return i.set(n, 0),
        i.set(o, n.byteLength),
        i.buffer
}

function convertToArrayBuffer(t, e) {
    if (e != 2) {
        t = JSON.stringify(t);
    }
    this.encoder = new TextEncoder();
    var n = new ArrayBuffer(16)
        , i = new DataView(n, 0)
        , s = this.encoder.encode(t);
    return i.setInt32(0, 16 + s.byteLength),
        wsBinaryHeaderList[2].value = e,
        wsBinaryHeaderList.forEach(function (t) {
            4 === t.bytes ? i.setInt32(t.offset, t.value) : 2 === t.bytes && i.setInt16(t.offset, t.value)
        }),
        [...new Uint8Array(mergeArrayBuffer(n, s))];
}

function convertToObject(t) {
    t = new Uint8Array(t).buffer;
    var e = new DataView(t)
        , n = {
        body: []
    };
    if (n.packetLen = e.getInt32(0),
        wsBinaryHeaderList.forEach(function (t) {
            4 === t.bytes ? n[t.key] = e.getInt32(t.offset) : 2 === t.bytes && (n[t.key] = e.getInt16(t.offset))
        }),
    n.packetLen < t.byteLength && convertToObject(t.slice(0, n.packetLen)),
        this.decoder = new TextDecoder(),
    !n.op || 5 !== n.op && n.op !== 8)
        n.op && 3 === n.op && (n.body = {
            count: e.getInt32(16)
        });
    else
        for (var i = 0, s = n.packetLen, a = "", u = ""; i < t.byteLength; i += s) {
            s = e.getInt32(i),
                a = e.getInt16(i + 4);
            if (n.ver === 0) {
                var c = this.decoder.decode(t.slice(i + a, i + s));
                u = 0 !== c.length ? JSON.parse(c) : null
            } else if (n.ver === 3) {
                var l = t.slice(i + a, i + s)
                    , h = new Int8Array(brotliDecompressSync(l));
                u = convertToObject(h.buffer).body
            }
            u && n.body.push(u)
        }
    return n
}
View Code

 挺简单的

标签:直播间,bytes,value,爬取,ws,&&,offset,var,new
From: https://www.cnblogs.com/inkser/p/17826504.html

相关文章

  • Windows PowerShell 设置背景
    1、在微软商城搜索和下载2、搜索并打开3、然后在打开即可4、选择外观即可5、设置背景图片即可6、背景图片......
  • 《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》阅读
    论文标题《SwinTransformer:HierarchicalVisionTransformerusingShiftedWindows》Swin这个词貌似来自后面的ShiftedWindowsShiftedWindows:移动窗口Hierarchical:分层作者微软亚洲研究院出品初读摘要提出SwinTransformer可以作为CV的通用主干Tansfo......
  • 【Windows】WinForms程序调用WinRT的API清空剪切板
    首先这是.NETFramework4.6项目才用的方法,高版本直接安装Microsoft.Windows.SDK.Contracts包来使用就行了。此代码实现了手动调用API获取WinRT的剪切板对象,并通过虚函数指针调用ClearHistory方法清空剪切板历史记录(Win+V)。1usingSystem;2usingSystem.Runtime.Compile......
  • windows操作系统中如何将apache zookeeper安装为系统服务
    记录一下,网上有些资料是错的,prunsrv的参数要以--开头!一下载最新版的apachecommonsdaemonhttp://archive.apache.org/dist/commons/daemon/binaries/windows/commons-daemon-1.3.4-bin-windows.zip解压,复制两个exe文件到zk的bin目录下二编写服务停止脚本(启动脚本不用自己......
  • 初识Windows-linux
    初识Windows-linux二者区别1)开源性:Linux是开源的,任何人都可以查看和修改其源代码,而Windows是闭源的,只有微软拥有其源代码。2)用户界面:Windows的用户界面相对直观易用(易上手),而Linux则需要学些基本命令的认识。3)应用程序:Windows拥有大量的商业软件和游戏,而Linux则更适合开发和运......
  • Ubuntu连接局域网中Windows主机上的v2r报错:rejected core/proxy/socks: unknown Sock
    参考:https://github.com/2dust/v2rayN/issues/3916  ================================    家里有两台电脑,一个是Windows系统,一个是Ubuntu系统;Windows系统用来平常工作舆论,Ubuntu系统用于远程vscode写写code,因此就有一个需求就使用要Ubuntu系统也能上GitHub。 ......
  • 推荐一款windows下仅8MB软件,太强大了!!
    先来看下它可以干嘛,软件在文末获取zTasker简介这款软件今年9月份才刚刚发布,但真的好用,所以必须推荐!!zTasker是一款体积小巧、占用资源极少的定时任务工具。它采用C++语言构建,采用了插件化架构,大量采用高度复用可维护的设计模式,并优化算法和流程,包含众多了强大功能的同时,性能做......
  • windows自带工具netsh trace 抓包
     简单实例 管理员模式运行netshtracestartcapture=yesreport=disabled protocol=TCPipv4.address=192.168.0.40tracefile=d:\a.etl  停止抓包netshtracestop  -------------------------------------------------------------其它可选参数 report=e......
  • 【小沐学前端】Windows下搭建WordPress(一、相关工具下载)
    1、简介WordPress是基于PHP和MySQL的免费开源内容管理系统(CMS)。它是全球使用最广泛的CMS软件,截至2019年5月,它为排名前1000万个网站中提供了超过30%的支持,并拥有在使用CMS构建的所有网站中,估计有60%的市场份额。1.1Nginxnginx[enginex]是一个HTTP和反向代理服务器,邮件代理......
  • python flask虚拟环境 uwsgi nginx Supervisor 宝塔面板部署
    安装部署对应的python版本1.安装虚拟环境插件virtualenvpipinstallvirtualenv2.创建虚拟环境virtualenv/www/wwwroot/项目/envvirtualenv+路径3.激活虚拟环境source/www/wwwroot/项目/env/bin/activate4.退出虚拟环境的指令deactivate这里不用管,需要退出的时......