bilibili-API-collect/grpc_api/index.html
github-actions 1424f73d2e generated
2026-01-22 17:37:01 +00:00

98 lines
52 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="generator" content="VuePress 2.0.0-rc.24" />
<style>
:root {
--vp-c-bg: #fff;
}
[data-theme='dark'] {
--vp-c-bg: #1b1b1f;
}
html,
body {
background-color: var(--vp-c-bg);
}
</style>
<script>
const useChoice = localStorage.getItem('vuepress-color-scheme')
const systemStatus =
'matchMedia' in window
? window.matchMedia('(prefers-color-scheme: dark)').matches
: false
if (useChoice === 'light') {
document.documentElement.dataset.theme = 'light'
} else if (useChoice === 'dark' || systemStatus) {
document.documentElement.dataset.theme = 'dark'
}
</script>
<link rel="icon" href="/bilibili-API-collect/logo2.jpg"><title>gRPC 接口定义protobuf 结构体) | BAC Document</title><meta name="description" content="社区开源的第三方哔哩哔哩 API 文档">
<link rel="preload" href="/bilibili-API-collect/assets/style-D1PJH1oj.css" as="style"><link rel="stylesheet" href="/bilibili-API-collect/assets/style-D1PJH1oj.css">
<link rel="modulepreload" href="/bilibili-API-collect/assets/app-Dgsdh8A6.js"><link rel="modulepreload" href="/bilibili-API-collect/assets/index.html-DfGFo93u.js">
<link rel="prefetch" href="/bilibili-API-collect/assets/CONTRIBUTING.html-Dg5RrJ0s.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index.html-CyFjrwOB.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/splash.html-DTxmsPVe.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/ver.html-BK7Hl968.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-CRFYL4xy.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-67H6b90D.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-CkX_wc45.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/activity_list.html-Bekn3Lxe.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-DMnsBsuq.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-CBuhzqhd.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/recommend_author.html-DBwItBdc.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-C0ql065z.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/articles.html-zLkcz3pu.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/card.html-wL4C5GKc.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/category.html-Xldy-aPs.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-CB0fSHFP.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/view.html-COrufaKB.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-BeujPZDG.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-DvFa4PRS.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/music_list.html-DeijlME4.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/musicstream_url.html-qq6CNfyp.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/rank.html-DT2C28KO.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/status_number.html-DEiPXucy.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/follow.html-DOVJW4CZ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-BLypTc8g.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/season_index.html-BSNCSXU1.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/timeline.html-CzpzQzIG.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/videostream_url.html-DlvjAVi_.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/banlist.html-Bx6m-UTQ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index.html-BMdR7u31.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/video_room.html-CJ-aNxn7.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-BHbw7wWp.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/videostream_url.html-DnLcd0On.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/ip.html-BZmNmhHk.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-D_ydhzqh.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-D36gw51A.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index.html-BN64GETH.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/opus.html-CoQ5EdO3.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/railgun.html-2O05GCD4.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/season.html-B_fCwBA8.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/statistics_data.html-BWH8OqIZ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/upload.html-DvDEkxhj.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/videos.html-4_uXrA4K.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/msg.html-C4G_rrXA.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-DeaDnvTK.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/buzzword.html-3axAz5ab.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/config.html-P2TT80Ma.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/danmaku_proto.html-B5M4AXvu.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/danmaku_view_proto.html-DtK2aZTc.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/danmaku_xml.html-bHEnwOx6.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/history.html-D731H-Qd.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/snapshot.html-sItLSrou.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/thumbup.html-oIOmP01b.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/webmask.html-BwxLSheT.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-D9uytAI1.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/all.html-MgLtiraJ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/atlist.html-CG0zNeT5.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/banner.html-W9RH5Lg_.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/basicInfo.html-DamYRO2m.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/card_info.html-BWktH6O6.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/content.html-DefzfqTR.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/detail.html-DH1NRSL5.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/dynamic_enum.html-DL_Gf64x.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/get_dynamic_detail.html-Bbk5LVZ-.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/nav.html-D91zXMZR.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/publish.html-DaacAe0m.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/space.html-BjwA2AkB.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/topic.html-CxxVTskb.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/Bcoin.html-BhhfS1Rx.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/WeChat_Alipay.html-D7UPw-Mv.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/charge_list.html-DOFwkRFh.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/charge_msg.html-Bd63UhW6.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/monthly.html-D8O3h0v-.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-DvqnymQp.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-Dk7ayv8u.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-DkRNgDlt.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-BSjizl7z.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-BfbnP9bx.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/color.html-D1CBKZrT.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/lottery.html-DbmXyYLK.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/skin.html-B7_-FfE5.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/history.html-U2B19yU-.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/toview.html-m3XzHepP.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/danmaku.html-cYqsa6rm.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/emoticons.html-XPYXDzf0.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/follow_up_live.html-B7NT2XJb.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/gift.html-CPTDEb2_.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/guard.html-CgEHD9Az.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-bgddEvuk.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_area.html-UOPRZqNz.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_bill.html-Bxf6rN7p.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_data.html-DPx4fcGp.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_replay.html-iMUKGSwe.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_stream.html-CTvbm8Zd.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_vote.html-niGIJdSc.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/manage.html-DmvWf2hl.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/message_stream.html-DYabMnOf.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/recommend.html-0Yo2xP9c.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/redpocket.html-Bc9pXjpT.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/report.html-BHBFFQZc.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/silent_user_manage.html-8B8EvR5w.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/user.html-FhJX8EJT.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/cookie_refresh.html-C-y7uaCA.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/exit.html-wyBJUhyQ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/login_info.html-DcTURbz0.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/login_notice.html-BXRbf4ou.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/member_center.html-UE6PIsuf.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/Activity.html-Bxk-gk5Y.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/ClockIn.html-CenNAwzg.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/Comic.html-CLerib4W.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/Download.html-Br9YEqP_.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/Season.html-Bv-xbTdd.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/User.html-BxuEgE-I.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index_file.html-KxhduYzw.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/light_card.html-BX3csIVY.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/point_shop.html-BUYGiY4x.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/msg.html-DgLc4Fa5.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/private_msg.html-CTuY6IIe.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/private_msg_content.html-DnEBdBrk.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/settings.html-BbVpohbZ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/b23tv.html-Dxsq1OVj.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/buvid3_4.html-DBUwha3H.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/bvid_desc.html-C81lzKez.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/device_identity.html-B5I04eFh.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/errcode.html-BlmDP2Xd.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/mathjax.html-B4Rx2kT_.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/picture.html-CKV2obIX.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/time_stamp.html-Cf7HhcO3.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-UGem3f8j.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/fetch.html-BtDU5o5f.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-C9gLOntC.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-DLzbyzsd.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-BtDZhXMA.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-Db8OOHOo.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index.html-5vHX0xv-.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/detail.html-VOBIbF4h.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/features.html-DiZBiXUW.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/rich_text_nodes.html-BvGiNCao.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/space.html-BdhGUVoS.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/hot.html-C_FX8JaJ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/search_request.html-xQgx95ji.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/search_response.html-BFpK_6jG.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/suggest.html-DlPRFJxV.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/teenager_mode.html-D3G18A_n.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/batch.html-cGq5Qeh2.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/check_nickname.html-BRdxxp6m.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/contract.html-YS65q_jn.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-CktfHCh6.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/medals.html-BRvf8EJa.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/official_role.html-CBvofUdP.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/register.html-BOasFjaK.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/relation.html-b3hEZ13C.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/space.html-BfZb_dIi.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/status_number.html-BT56l5dB.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-DLBmRfG7.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/appeal.html-CcLQmg66.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/attribute_data.html-C_YkRlS-.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/collection.html-B-uxvybk.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-L873uB9d.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/interact_video.html-DoiQ0Pcr.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/online.html-DJ5lT1x9.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/pbp.html-BBYSf0a-.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/player.html-ZpJBp7gv.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/recommend.html-D0A21iEw.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/report.html-DuHXegGH.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/snapshot.html-hqn3Xd78.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/status_number.html-iguXtKgQ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/summary.html-DYcY1pBr.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/tags.html-Jjo00nOo.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/video_zone.html-B-nRnqQj.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/video_zone_v2.html-Cqbk0tky.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/videostream_url.html-JIL5pwcj.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/dynamic.html-BfZKb2_b.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/popular.html-xzW9jflm.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/precious_videos.html-DUvixdN1.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/ranking.html-Cx0F7V2z.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-1E0fVjfS.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/center.html-FZSMvI39.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/clockin.html-CE6-I-0u.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-D7kTJjVD.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-Bj2GpsEI.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/404_manga.html-CkQTSSKc.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/banner.html-CWlCIz3C.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/header.html-CSeKquiq.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/zone_upload.html-CcYIfnj4.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-BIakPva5.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/base_info.html-DevYYkKc.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/judgement_info.html-BuyAWrJX.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/QR.html-BHJa37nz.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/SMS.html-In_XL6PP.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/password.html-CmP0Tl9k.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index.html-B3pWXgRb.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/APP.html-CuPBHwrB.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/APPKey.html-CPC2-tlJ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/bili_ticket.html-BusUE46s.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/v_voucher.html-BbbVVnZu.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/wbi.html-D21GJ5Gx.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/404.html-DrI-cPdQ.js" as="script">
</head>
<body>
<div id="app"><!--[--><div class="vp-theme-container external-link-icon" vp-container><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/bilibili-API-collect/"><img class="vp-site-logo" src="/bilibili-API-collect/logo2.jpg" alt="BAC Document"><span class="vp-site-name vp-hide-mobile" aria-hidden="true">BAC Document</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/" aria-label="首页"><!--[--><!--[--><!--]--><!--]-->首页<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/#🍴目录" aria-label="目录"><!--[--><!--[--><!--]--><!--]-->目录<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/CONTRIBUTING.html" aria-label="贡献指南"><!--[--><!--[--><!--]--><!--]-->贡献指南<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="相关社群"><span class="title">相关社群</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="相关社群"><span class="title">相关社群</span><span class="right arrow"></span></button><ul class="vp-navbar-dropdown" style="display:none;"><!--[--><li class="vp-navbar-dropdown-item"><a class="auto-link external-link" href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&amp;k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&amp;authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&amp;noverify=0&amp;group_code=191187164" aria-label="QQ交流群综合技术交流" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->QQ交流群综合技术交流<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="auto-link external-link" href="https://t.me/bilibili_API_collect_community" aria-label="Telegram交流群Github Bot推送" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Telegram交流群Github Bot推送<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://github.com/SocialSisterYi/bilibili-API-collect" aria-label="GitHub" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->GitHub<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><form class="search-box" role="search"><input type="search" placeholder="搜索" autocomplete="off" spellcheck="false" value><!----></form></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/" aria-label="首页"><!--[--><!--[--><!--]--><!--]-->首页<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/#🍴目录" aria-label="目录"><!--[--><!--[--><!--]--><!--]-->目录<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/CONTRIBUTING.html" aria-label="贡献指南"><!--[--><!--[--><!--]--><!--]-->贡献指南<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="相关社群"><span class="title">相关社群</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="相关社群"><span class="title">相关社群</span><span class="right arrow"></span></button><ul class="vp-navbar-dropdown" style="display:none;"><!--[--><li class="vp-navbar-dropdown-item"><a class="auto-link external-link" href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&amp;k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&amp;authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&amp;noverify=0&amp;group_code=191187164" aria-label="QQ交流群综合技术交流" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->QQ交流群综合技术交流<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="auto-link external-link" href="https://t.me/bilibili_API_collect_community" aria-label="Telegram交流群Github Bot推送" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Telegram交流群Github Bot推送<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://github.com/SocialSisterYi/bilibili-API-collect" aria-label="GitHub" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->GitHub<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="vp-sidebar-items"><!--[--><li><p tabindex="0" class="vp-sidebar-item vp-sidebar-heading">gRPC 接口定义protobuf 结构体) <!----></p><!----></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-page"><!--[--><!--]--><div vp-content><!--[--><!--]--><div id="content"><h1 id="grpc-接口定义-protobuf-结构体" tabindex="-1"><a class="header-anchor" href="#grpc-接口定义-protobuf-结构体"><span>gRPC 接口定义protobuf 结构体)</span></a></h1><p>注:</p><ol><li><p>proto 结构体文件按照包名分类, 同级放在同一目录中</p></li><li><p>gRPC 接口定义全部来自对官方粉版(即大陆版本) APP 的逆向工程, 一般不会有错误, 但是可能有更新, 有实际应用需求的建议自行反编译 APP, 定位到 <code>com.bapis.*</code> 自行补足.</p></li></ol><h2 id="grpc-主机" tabindex="-1"><a class="header-anchor" href="#grpc-主机"><span>gRPC 主机</span></a></h2><p>B 站客户端的 gRPC 接口主机包括:</p><ul><li><code>grpc.biliapi.net</code> 原生 gRPC 接口</li><li><code>app.bilibili.com</code> Failover gRPC 接口</li></ul><p>实际应用中, 后者速度相对更快. 但是需要设置如 gRPC 超时时间等参数时只能使用前者.</p><h2 id="grpc-鉴权" tabindex="-1"><a class="header-anchor" href="#grpc-鉴权"><span>gRPC 鉴权</span></a></h2><p>需要在 Metadata 中添加 <code>authorization</code>: <code>identify_v1 {access_key}</code>.</p><h2 id="grpc-metadata" tabindex="-1"><a class="header-anchor" href="#grpc-metadata"><span>gRPC Metadata</span></a></h2><p>参考 <a href="https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md" target="_blank" rel="noopener noreferrer">gRPC Go 官方文档</a><code>Metadata</code> 的说明.</p><p>gRPC 的 <code>Metadata</code> 简单理解,就是 HTTP 的 Header 中的 key-value 对, 本质上是一个 Map. 在 gRPC <code>Metadata</code>key 永远是 String但是 value 可以是 String 也可以是二进制数据. <strong>需要存储二进制数据时, key 应当加上一个 <code>-bin</code> 后缀, 同时二进制 value 应当编码为 Base64</strong>.</p><p>一般而言, 设定 Binary 类型的 <code>Metadata</code> 时, 需要调用各个语言的 gRPC 库的相应方法, 库会帮我们编码二进制数据, 无需我们自行编码.</p><p>需要的 <code>Metadata</code> 包括(但不限于):</p><ul><li>Ascii 类 <ul><li><code>user-agent</code> 客户端 UA, 如 <code>Dalvik/2.1.0 (Linux; U; Android 12; {device_model} Build/{device_build}) {app_ver} os/android model/{device_model} mobi_app/{mobi_app} build/{app_build} channel/master innerVer/{app_build_inner} osVer/12 network/2 grpc-java-cronet/1.36.1</code>(其中 <code>grpc-java-cronet/1.36.1</code> 为原生 gRPC 接口才需要的). <strong>必需</strong>. <ul><li><code>device_model</code> 设备 Model, 如 <code>NOH-AN01</code>.</li><li><code>device_build</code> 设备 Build, 如 <code>HUAWEINOH-AN01</code>.</li><li><code>app_ver</code> APP 版本号, 如 <code>7.38.0</code>.</li><li><code>mobi_app</code> APP 包类型, 参考 <a class="route-link" href="/bilibili-API-collect/docs/misc/sign/APPKey.html">APPKey.md</a>.</li><li><code>app_build</code> APP 版本号, 如 <code>7380300</code>.</li><li><code>app_build_inner</code> APP 版本号(内部), 如 <code>7380310</code>. 实际应用中设置为 <code>app_build</code> 即可.</li></ul></li><li><code>x-bili-gaia-vtoken</code> 暂时留空.</li><li><code>x-bili-aurora-eid</code><code>UFUFQ1AA</code>. 算法见附录. 未登录留空. <strong>必需</strong>.</li><li><code>x-bili-mid</code> 用户 UID, 未登录默认为 0. <strong>必需</strong>.</li><li><code>x-bili-aurora-zone</code> 留空. <strong>必需</strong>.</li><li><code>x-bili-trace-id</code><code>06e903399574695df75be114ff63ac64:f75be114ff63ac64:0:0</code>. 算法见附录. <strong>必需</strong>.</li><li><code>authorization</code> 鉴权, 登录时设定为 <code>identify_v1 {access_key}</code>, 未登录时无需此项.</li><li><code>buvid</code> 设备唯一标识, 算法见 <a class="route-link" href="/bilibili-API-collect/docs/misc/device_identity.html">device_identity.md</a>. <strong>必需(?)</strong>.</li><li><code>bili-http-engine</code> 恒定为 <code>cronet</code>, 使用 <code>grpc.biliapi.net</code> 作为 gRPC 主机时无需此项.</li><li><code>te</code> 恒定为 <code>trailers</code>, Java gRPC 库固定添加, 使用 <code>app.bilibili.com</code> 作为 gRPC 主机时无需此项.</li></ul></li><li>Binary 类 <ul><li><code>x-bili-fawkes-req-bin</code> 设备 Fawkes 信息, 使用 <a href="bilibili/metadata/fawkes/fawkes.proto">FawkesReq</a> 生成. <strong>必需</strong>.</li><li><code>x-bili-metadata-bin</code> 使用 <a href="bilibili/metadata/metadata.proto">Metadata</a> 生成. <strong>必需</strong>.</li><li><code>x-bili-device-bin</code> 设备信息, 使用 <a href="bilibili/metadata/device/device.proto">Device</a> 生成. <strong>必需</strong>.</li><li><code>x-bili-network-bin</code> 设备网络信息, 使用 <a href="bilibili/metadata/network/network.proto">Network</a> 生成. <strong>必需</strong>.</li><li><code>x-bili-restriction-bin</code> 限制信息, 使用 <a href="bilibili/metadata/restriction/restriction.proto">Restriction</a> 生成. 本项一般直接传空值即可. <strong>必需</strong>.</li><li><code>x-bili-locale-bin</code> 设备区域信息, 使用 <a href="bilibili/metadata/locale/locale.proto">Locale</a> 生成. <strong>必需</strong>.</li><li><code>x-bili-exps-bin</code> 使用 <a href="bilibili/metadata/pararbox/pararbox.proto">Exps</a> 生成. 本项一般直接传空值即可. <strong>必需</strong>.</li></ul></li></ul><h2 id="接口请求定义" tabindex="-1"><a class="header-anchor" href="#接口请求定义"><span>接口请求定义</span></a></h2><p>等待补充, 参见 proto 文件注释. 以下仅介绍常用接口:</p><ul><li><a href="bilibili/app/playeronline/v1/playeronline.proto">bilibili.app.playeronline.v1 -&gt; PlayerOnline</a> 视频在线人数接口.</li><li><a href="bilibili/app/playerunite/v1/playerunite.proto">bilibili.app.playerunite.v1 -&gt; PlayViewUnite</a> United 视频播放链接接口(同时适用于 PGC, UGC 视频).</li><li><a href="bilibili/app/playurl/v1/playurl.proto">bilibili.app.playurl.v1 -&gt; PlayURL</a> UGC 视频播放链接接口(V1 版本).</li><li><a href="bilibili/pgc/gateway/player/v1/playurl.proto">bilibili.pgc.gateway.player.v1 -&gt; PlayView</a> PGC 视频播放链接接口(V1 版本).</li><li><a href="bilibili/pgc/gateway/player/v2/playurl.proto">bilibili.pgc.gateway.player.v2 -&gt; PlayView</a> PGC 视频播放链接接口(V2 版本).</li><li><a href="bilibili/polymer/app/search/v1/search.proto">bilibili.polymer.app.search.v1 -&gt; SearchAll, etc</a> 搜索接口(V1 版本).</li><li><a href="bilibili/app/dynamic/v2/dynamic.proto">bilibili.app.dynamic.v2 -&gt; DynAll, etc</a> 动态接口(V2 版本).</li><li>...</li></ul><h2 id="应用示例" tabindex="-1"><a class="header-anchor" href="#应用示例"><span>应用示例</span></a></h2><h3 id="golang" tabindex="-1"><a class="header-anchor" href="#golang"><span>Golang</span></a></h3><p>B 站 gRPC API Golang 封装:<a href="https://github.com/XiaoMiku01/bilibili-grpc-api-go" target="_blank" rel="noopener noreferrer">XiaoMiku01/bilibili-grpc-api-go</a></p><h2 id="附录" tabindex="-1"><a class="header-anchor" href="#附录"><span>附录</span></a></h2><details><summary>点此展开</summary><h3 id="x-bili-aurora-eid-生成算法" tabindex="-1"><a class="header-anchor" href="#x-bili-aurora-eid-生成算法"><span><code>x-bili-aurora-eid</code> 生成算法</span></a></h3><div class="language-rust line-numbers-mode" data-highlighter="shiki" data-ext="rust" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-rust"><span class="line"><span style="color:#569CD6;">pub</span><span style="color:#569CD6;"> fn</span><span style="color:#DCDCAA;"> gen_aurora_eid</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">uid</span><span style="color:#D4D4D4;">: </span><span style="color:#4EC9B0;">u64</span><span style="color:#D4D4D4;">) -&gt; </span><span style="color:#4EC9B0;">Option</span><span style="color:#D4D4D4;">&lt;</span><span style="color:#4EC9B0;">String</span><span style="color:#D4D4D4;">&gt; {</span></span>
<span class="line"><span style="color:#C586C0;"> if</span><span style="color:#9CDCFE;"> uid</span><span style="color:#D4D4D4;"> == </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;"> {</span></span>
<span class="line"><span style="color:#C586C0;"> return</span><span style="color:#4EC9B0;"> None</span><span style="color:#D4D4D4;">;</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#569CD6;"> mut</span><span style="color:#9CDCFE;"> result_byte</span><span style="color:#D4D4D4;"> = </span><span style="color:#4EC9B0;">Vec</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">with_capacity</span><span style="color:#D4D4D4;">(</span><span style="color:#B5CEA8;">64</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#6A9955;"> // 1. 将 UID 字符串转为字节数组.</span></span>
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#9CDCFE;"> mid_byte</span><span style="color:#D4D4D4;"> = </span><span style="color:#9CDCFE;">uid</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">to_string</span><span style="color:#D4D4D4;">().</span><span style="color:#DCDCAA;">into_bytes</span><span style="color:#D4D4D4;">();</span></span>
<span class="line"><span style="color:#6A9955;"> // 2. 将字节数组逐位(记为第 i 位)与 b&quot;ad1va46a7lza&quot; 中第 (i % 12) 位进行异或操作, 作为结果数组第 i 位.</span></span>
<span class="line"><span style="color:#9CDCFE;"> mid_byte</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">iter</span><span style="color:#D4D4D4;">().</span><span style="color:#DCDCAA;">enumerate</span><span style="color:#D4D4D4;">().</span><span style="color:#DCDCAA;">for_each</span><span style="color:#D4D4D4;">(|(</span><span style="color:#9CDCFE;">i</span><span style="color:#D4D4D4;">, </span><span style="color:#9CDCFE;">v</span><span style="color:#D4D4D4;">)| {</span></span>
<span class="line"><span style="color:#9CDCFE;"> result_byte</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">v</span><span style="color:#D4D4D4;"> ^ (</span><span style="color:#CE9178;">b&quot;ad1va46a7lza&quot;</span><span style="color:#D4D4D4;">[</span><span style="color:#9CDCFE;">i</span><span style="color:#D4D4D4;"> % </span><span style="color:#B5CEA8;">12</span><span style="color:#D4D4D4;">]))</span></span>
<span class="line"><span style="color:#D4D4D4;"> });</span></span>
<span class="line"><span style="color:#6A9955;"> // 3. 对字节数组执行 Base64 编码, 注意 no padding, 即得到 x-bili-aurora-eid.</span></span>
<span class="line"><span style="color:#4EC9B0;"> Some</span><span style="color:#D4D4D4;">(</span><span style="color:#4EC9B0;">base64</span><span style="color:#D4D4D4;">::</span><span style="color:#4EC9B0;">Engine</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">encode</span><span style="color:#D4D4D4;">(</span></span>
<span class="line"><span style="color:#D4D4D4;"> &amp;</span><span style="color:#4EC9B0;">base64</span><span style="color:#D4D4D4;">::</span><span style="color:#4EC9B0;">engine</span><span style="color:#D4D4D4;">::</span><span style="color:#4EC9B0;">general_purpose</span><span style="color:#D4D4D4;">::STANDARD_NO_PAD,</span></span>
<span class="line"><span style="color:#9CDCFE;"> result_byte</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#D4D4D4;"> ))</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="x-bili-trace-id-生成算法" tabindex="-1"><a class="header-anchor" href="#x-bili-trace-id-生成算法"><span><code>x-bili-trace-id</code> 生成算法</span></a></h3><div class="language-rust line-numbers-mode" data-highlighter="shiki" data-ext="rust" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-rust"><span class="line"><span style="color:#569CD6;">pub</span><span style="color:#569CD6;"> fn</span><span style="color:#DCDCAA;"> gen_trace_id</span><span style="color:#D4D4D4;">() -&gt; </span><span style="color:#4EC9B0;">String</span><span style="color:#D4D4D4;"> {</span></span>
<span class="line"><span style="color:#6A9955;"> // 1. 生成 32 位随机字符串 random_id , Charset 为 0~9, a~z. </span></span>
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#9CDCFE;"> random_id</span><span style="color:#D4D4D4;"> = </span><span style="color:#DCDCAA;">gen_random_string!</span><span style="color:#D4D4D4;">(</span><span style="color:#B5CEA8;">32</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#569CD6;"> mut</span><span style="color:#9CDCFE;"> random_trace_id</span><span style="color:#D4D4D4;"> = </span><span style="color:#4EC9B0;">String</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">with_capacity</span><span style="color:#D4D4D4;">(</span><span style="color:#B5CEA8;">40</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#6A9955;"> // 2. 取 random_id 前 24 位, 作为 random_trace_id.</span></span>
<span class="line"><span style="color:#9CDCFE;"> random_trace_id</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(&amp;</span><span style="color:#9CDCFE;">random_id</span><span style="color:#D4D4D4;">[</span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">..</span><span style="color:#B5CEA8;">24</span><span style="color:#D4D4D4;">]);</span></span>
<span class="line"><span style="color:#6A9955;"> // 3. 初始化一个长度为 3 的数组 b_arr, 初始值都为 0.</span></span>
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#569CD6;"> mut</span><span style="color:#9CDCFE;"> b_arr</span><span style="color:#D4D4D4;">: [</span><span style="color:#4EC9B0;">i8</span><span style="color:#D4D4D4;">; </span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">] = [</span><span style="color:#B5CEA8;">0</span><span style="color:#4EC9B0;">i8</span><span style="color:#D4D4D4;">; </span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">];</span></span>
<span class="line"><span style="color:#6A9955;"> // 并获取当前时间戳</span></span>
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#569CD6;"> mut</span><span style="color:#9CDCFE;"> ts</span><span style="color:#D4D4D4;"> = </span><span style="color:#4EC9B0;">chrono</span><span style="color:#D4D4D4;">::</span><span style="color:#4EC9B0;">Local</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">now</span><span style="color:#D4D4D4;">().</span><span style="color:#DCDCAA;">timestamp</span><span style="color:#D4D4D4;">();</span></span>
<span class="line"><span style="color:#6A9955;"> // 使用循环从高位到低位遍历 b_arr 数组, 循环体内执行以下逻辑:</span></span>
<span class="line"><span style="color:#6A9955;"> // - 首先将 ts 右移 8 位</span></span>
<span class="line"><span style="color:#6A9955;"> // - 然后根据条件向 b_arr 的第 i 位赋值: </span></span>
<span class="line"><span style="color:#6A9955;"> // - 如果 (ts / 128) % 2的结果为0, 则 b_arr[i] = ts % 256</span></span>
<span class="line"><span style="color:#6A9955;"> // - 否则 b_arr[i] = ts % 256 - 256</span></span>
<span class="line"><span style="color:#C586C0;"> for</span><span style="color:#9CDCFE;"> i</span><span style="color:#569CD6;"> in</span><span style="color:#D4D4D4;"> (</span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">..</span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">).</span><span style="color:#DCDCAA;">rev</span><span style="color:#D4D4D4;">() {</span></span>
<span class="line"><span style="color:#9CDCFE;"> ts</span><span style="color:#D4D4D4;"> &gt;&gt;= </span><span style="color:#B5CEA8;">8</span><span style="color:#D4D4D4;">;</span></span>
<span class="line"><span style="color:#9CDCFE;"> b_arr</span><span style="color:#D4D4D4;">[</span><span style="color:#9CDCFE;">i</span><span style="color:#D4D4D4;">] = {</span></span>
<span class="line"><span style="color:#C586C0;"> if</span><span style="color:#D4D4D4;"> ((</span><span style="color:#9CDCFE;">ts</span><span style="color:#D4D4D4;"> / </span><span style="color:#B5CEA8;">128</span><span style="color:#D4D4D4;">) % </span><span style="color:#B5CEA8;">2</span><span style="color:#D4D4D4;">) == </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;"> {</span></span>
<span class="line"><span style="color:#D4D4D4;"> (</span><span style="color:#9CDCFE;">ts</span><span style="color:#D4D4D4;"> % </span><span style="color:#B5CEA8;">256</span><span style="color:#D4D4D4;">) </span><span style="color:#569CD6;">as</span><span style="color:#4EC9B0;"> i8</span></span>
<span class="line"><span style="color:#D4D4D4;"> } </span><span style="color:#C586C0;">else</span><span style="color:#D4D4D4;"> {</span></span>
<span class="line"><span style="color:#D4D4D4;"> (</span><span style="color:#9CDCFE;">ts</span><span style="color:#D4D4D4;"> % </span><span style="color:#B5CEA8;">256</span><span style="color:#D4D4D4;"> - </span><span style="color:#B5CEA8;">256</span><span style="color:#D4D4D4;">) </span><span style="color:#569CD6;">as</span><span style="color:#4EC9B0;"> i8</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#6A9955;"> // 4. 将数组 b_arr 中的每个元素逐个转换为两位的十六进制字符串并追加到 random_trace_id 中.</span></span>
<span class="line"><span style="color:#C586C0;"> for</span><span style="color:#9CDCFE;"> i</span><span style="color:#569CD6;"> in</span><span style="color:#B5CEA8;"> 0</span><span style="color:#D4D4D4;">..</span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;"> {</span></span>
<span class="line"><span style="color:#9CDCFE;"> random_trace_id</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(&amp;</span><span style="color:#DCDCAA;">format!</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">&quot;{:0&gt;2x}&quot;</span><span style="color:#D4D4D4;">, </span><span style="color:#9CDCFE;">b_arr</span><span style="color:#D4D4D4;">[</span><span style="color:#9CDCFE;">i</span><span style="color:#D4D4D4;">]))</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#6A9955;"> // 5. 将 random_id 的第 31, 32 个字符追加到 random_trace_id 中, 此时 random_trace_id 生成完毕, 应当为 32 位长度.</span></span>
<span class="line"><span style="color:#9CDCFE;"> random_trace_id</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(&amp;</span><span style="color:#9CDCFE;">random_id</span><span style="color:#D4D4D4;">[</span><span style="color:#B5CEA8;">30</span><span style="color:#D4D4D4;">..</span><span style="color:#B5CEA8;">32</span><span style="color:#D4D4D4;">]);</span></span>
<span class="line"><span style="color:#6A9955;"> // 6. 最后, 按 `{random_trace_id}:{random_trace_id[16..32]}:0:0` 的顺序拼接起来, 即为 x-bili-trace-id</span></span>
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#569CD6;"> mut</span><span style="color:#9CDCFE;"> random_trace_id_final</span><span style="color:#D4D4D4;"> = </span><span style="color:#4EC9B0;">String</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">with_capacity</span><span style="color:#D4D4D4;">(</span><span style="color:#B5CEA8;">64</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#9CDCFE;"> random_trace_id_final</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(&amp;</span><span style="color:#9CDCFE;">random_trace_id</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#9CDCFE;"> random_trace_id_final</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">&quot;:&quot;</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#9CDCFE;"> random_trace_id_final</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(&amp;</span><span style="color:#9CDCFE;">random_trace_id</span><span style="color:#D4D4D4;">[</span><span style="color:#B5CEA8;">16</span><span style="color:#D4D4D4;">..</span><span style="color:#B5CEA8;">32</span><span style="color:#D4D4D4;">]);</span></span>
<span class="line"><span style="color:#9CDCFE;"> random_trace_id_final</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">&quot;:0:0&quot;</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#9CDCFE;"> random_trace_id_final</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details></div><!--[--><!--]--></div><footer class="vp-page-meta"><div class="vp-meta-item edit-link"><a class="auto-link external-link label" href="https://github.com/SocialSisterYi/bilibili-API-collect/edit/master/grpc_api/readme.md" aria-label="在 GitHub 上编辑此页" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><svg class="edit-icon" viewbox="0 0 1024 1024"><g fill="currentColor"><path d="M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"></path><path d="M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"></path></g></svg><!--]--><!--]-->在 GitHub 上编辑此页<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-meta-item git-info"><div class="vp-meta-item last-updated"><span class="meta-item-label">最近更新: </span><time class="meta-item-info" datetime="2023-07-14T04:46:41.000Z" data-allow-mismatch>2023/7/14 04:46</time></div><div class="vp-meta-item contributors"><span class="meta-item-label">Contributors: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: 45892418+SocialSisterYi@users.noreply.github.com">SocialSisterYi</span><!--[-->, <!--]--><!--]--><!--[--><span class="contributor" title="email: loveava0612@outlook.com">XiaoMiku01</span><!--[-->, <!--]--><!--]--><!--[--><span class="contributor" title="email: 70561268+cxw620@users.noreply.github.com">cxw620</span><!----><!--]--><!--]--></span></div></div></footer><!----><!--[--><!--[--><footer style="text-align:center;"> Copyright © 2020-2025 <a href="https://github.com/SocialSisterYi/">SocialSisterYi</a> | <a href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/LICENSE">CC-BY-NC-4.0 Licensed</a></footer><!--]--><!--]--></main><!--]--></div><!--[--><!----><!--]--><!--]--></div>
<script type="module" src="/bilibili-API-collect/assets/app-Dgsdh8A6.js" defer></script>
</body>
</html>