98 lines
52 KiB
HTML
98 lines
52 KiB
HTML
<!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
|
||
|
|
</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&k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&noverify=0&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.0
|
||
|
|
<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"ad1va46a7lza" 中第 (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"ad1va46a7lza"</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;"> &</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;">() -> </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;">(&</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;"> >>= </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;">(&</span><span style="color:#DCDCAA;">format!</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">"{:0>2x}"</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;">(&</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;">(&</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;">":"</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:#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;">":0:0"</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>
|