38 lines
19 KiB
JavaScript
38 lines
19 KiB
JavaScript
import{_ as d,c as r,a as o,b as t,d as e,e as l,w as a,r as i,o as p}from"./app-Dgsdh8A6.js";const c={};function u(D,s){const n=i("RouteLink");return p(),r("div",null,[s[35]||(s[35]=o('<h1 id="v-voucher-验è¯�" tabindex="-1"><a class="header-anchor" href="#v-voucher-验è¯�"><span>v_voucher 验è¯�</span></a></h1><h2 id="简述" tabindex="-1"><a class="header-anchor" href="#简述"><span>简述</span></a></h2><p>当å�Œä¸€æŽ¥å�£åœ¨çŸæ—¶é—´å†…被å�Œä¸€ç”¨æˆ·/IP/UA多次请求或异常时, 会触å�‘风控, 如接å�£è¿”回 <code>code</code> 为 <code>-352</code> å�³ <code>é£ŽæŽ§æ ¡éªŒå¤±è´¥</code>, å�Œæ—¶ <code>data</code> ä¸å‡ºçް <code>v_voucher</code> å—æ®µ, å“�应头出现 <code>x-bili-gaia-vvoucher</code></p><p><code>v_voucher</code> 结构为å—符串 <code>voucher_</code> å°¾éš�一串以 <code>-</code> 为分隔符的å°�写 UUID</p><p><code>v_voucher</code> å�¯ç”¨äºŽç”³è¯· captcha 验è¯�ç �, è‹¥æ— æ„�外å�‘生, æ ¹æ�®éªŒè¯�结果使用 <code>validate</code> 接å�£èŽ·å�– <code>grisk_id</code> 作为被风控接å�£çš„ <code>gaia_vtoken</code> 与 Cookie ä¸çš„ <code>x-bili-gaia-vtoken</code>, å�³å�¯æ�¢å¤�æ£å¸¸è®¿é—®</p>',5)),t("p",null,[s[2]||(s[2]=e("若该情况出现在使用 Wbi ç¾å��的接å�£ä¸, 建议先检查 Wbi ç¾å��是å�¦æ£ç¡®. 若已检查 Wbi ç¾å��æˆ–æ— éœ€ç¾å��, æ£€æŸ¥è¯·æ±‚å¤´ä¸ ")),s[3]||(s[3]=t("code",null,"User-Agent",-1)),s[4]||(s[4]=e()),s[5]||(s[5]=t("code",null,"Referer",-1)),s[6]||(s[6]=e(" 是å�¦æ£å¸¸, 以å�Š ")),s[7]||(s[7]=t("code",null,"Cookie",-1)),s[8]||(s[8]=e(" ä¸ ")),l(n,{to:"/docs/misc/sign/bili_ticket.html"},{default:a(()=>s[0]||(s[0]=[t("code",null,"bili_ticket",-1)])),_:1,__:[0]}),s[9]||(s[9]=e()),l(n,{to:"/docs/misc/buvid3_4.html"},{default:a(()=>s[1]||(s[1]=[t("code",null,"b_nut",-1),e(),t("code",null,"buvid3",-1),e(),t("code",null,"buvid4",-1)])),_:1,__:[1]}),s[10]||(s[10]=e(" ç‰æ˜¯å�¦å˜åœ¨. 使用 captcha 是最å�Žçš„选择, å› ä¸º captcha 验è¯�需è¦�用户æ“�作"))]),s[36]||(s[36]=t("p",null,[e("å�‚è§� "),t("a",{href:"https://github.com/SocialSisterYi/bilibili-API-collect/issues/1067",target:"_blank",rel:"noopener noreferrer"},"#1067")],-1)),s[37]||(s[37]=t("p",null,[t("strong",null,"注æ„�: ä¸�是所有风控都å�¯ä»¥ä½¿ç”¨æœ¬æ–¹å¼�通过 captcha 解决")],-1)),s[38]||(s[38]=t("h2",{id:"æ“�作æµ�程",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#æ“�作æµ�程"},[t("span",null,"æ“�作æµ�程")])],-1)),t("ol",null,[s[28]||(s[28]=o(`<li><p>快速以ä¸�æ£ç¡®çš„姿势请求接å�£, 直到返回 <code>v_voucher</code> å—æ®µå¦‚下. è‹¥ <code>data</code> 䏿²¡æœ‰ <code>v_voucher</code> å—æ®µ, 则检查å“�应头 <code>x-bili-gaia-vvoucher</code></p><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
|
||||
|
|
<span class="line"><span style="color:#9CDCFE;"> "code"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">-352</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "message"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"é£ŽæŽ§æ ¡éªŒå¤±è´¥"</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "ttl"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "data"</span><span style="color:#D4D4D4;">: {</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "v_voucher"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"voucher_84a8c3ce-33f5-4551-9552-9c6b13aa7938"</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></div></li>`,1)),t("li",null,[t("p",null,[s[12]||(s[12]=t("a",{href:"#%E4%BB%8E-v_voucher-%E7%94%B3%E8%AF%B7-captcha"},[e("请求 "),t("code",null,"register"),e(" 接å�£")],-1)),s[13]||(s[13]=e(", è¯·æ±‚ä½“ä¼ å…¥ ")),s[14]||(s[14]=t("code",null,"csrf",-1)),s[15]||(s[15]=e(" å�Š ")),s[16]||(s[16]=t("code",null,"v_voucher",-1)),s[17]||(s[17]=e(", 该接å�£è¿”回与 ")),l(n,{to:"/docs/login/login_action/#%E7%94%B3%E8%AF%B7captcha%E9%AA%8C%E8%AF%81%E7%A0%81"},{default:a(()=>s[11]||(s[11]=[e("申请captcha验è¯�ç �")])),_:1,__:[11]}),s[18]||(s[18]=e(" 部分相å�Œ, 记录æ¤å¤„返回的 ")),s[19]||(s[19]=t("code",null,"token",-1)),s[20]||(s[20]=e()),s[21]||(s[21]=t("code",null,"challenge",-1))])]),t("li",null,[t("p",null,[s[23]||(s[23]=e("按照 ")),l(n,{to:"/docs/login/login_action/#%E9%AA%8C%E8%AF%81captcha%E9%AA%8C%E8%AF%81%E7%A0%81"},{default:a(()=>s[22]||(s[22]=[e("验è¯�captcha验è¯�ç �")])),_:1,__:[22]}),s[24]||(s[24]=e(" 进行验è¯�, 记下验è¯�结果的 ")),s[25]||(s[25]=t("code",null,"validate",-1)),s[26]||(s[26]=e(" 与 ")),s[27]||(s[27]=t("code",null,"seccode",-1))])]),s[29]||(s[29]=o('<li><p><a href="#%E4%BB%8E%E9%AA%8C%E8%AF%81%E7%BB%93%E6%9E%9C%E8%8E%B7%E5%8F%96-grisk_id">请求 <code>validate</code> 接å�£</a>, è¯·æ±‚ä½“ä¼ å…¥ <code>challenge</code> <code>token</code> <code>validate</code> <code>seccode</code> <code>csrf</code>, 该接å�£è¿”回 <code>grisk_id</code> å�³ <code>gaia_vtoken</code> 与 <code>x-bili-gaia-vtoken</code></p></li><li><p>é‡�新请求原接å�£, 原 URL å�‚æ•°åŠ å…¥ <code>gaia_vtoken</code>, Cookie åŠ å…¥ <code>x-bili-gaia-vtoken</code>, å�³æ�¢å¤�æ£å¸¸</p></li>',2))]),s[39]||(s[39]=t("h2",{id:"接å�£åˆ—表",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#接å�£åˆ—表"},[t("span",null,"接å�£åˆ—表")])],-1)),s[40]||(s[40]=t("h3",{id:"从-v-voucher-申请-captcha",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#从-v-voucher-申请-captcha"},[t("span",null,"从 v_voucher 申请 captcha")])],-1)),s[41]||(s[41]=t("blockquote",null,[t("p",null,"https://api.bilibili.com/x/gaia-vgate/v1/register")],-1)),t("p",null,[s[31]||(s[31]=e("注: å�Œä¸€æœ‰æ•ˆ ")),s[32]||(s[32]=t("code",null,"v_voucher",-1)),s[33]||(s[33]=e(" å�ªèƒ½è¯·æ±‚一次, 请求完毕请立å�³ ")),l(n,{to:"/docs/login/login_action/#%E8%BF%9B%E8%A1%8C%E9%AA%8C%E8%AF%81"},{default:a(()=>s[30]||(s[30]=[e("进行验è¯�")])),_:1,__:[30]}),s[34]||(s[34]=e(" 防æ¢è¿‡æœŸå¤±æ•ˆ"))]),s[42]||(s[42]=o(`<p><em>请求方å¼�: POST</em></p><p><strong>æ£æ–‡å�‚æ•°(application/x-www-form-urlencoded):</strong></p><table><thead><tr><th>å�‚æ•°å��</th><th>类型</th><th>内容</th><th>å¿…è¦�性</th><th>备注</th></tr></thead><tbody><tr><td>csrf</td><td>str</td><td>CSRF Token (ä½�于 Cookie çš„ bili_jct)</td><td>é�žå¿…è¦�</td><td></td></tr><tr><td>v_voucher</td><td>str</td><td>v_voucher</td><td>å¿…è¦�</td><td></td></tr></tbody></table><p><strong>JSON回å¤�:</strong></p><p>æ ¹å¯¹è±¡:</p><table><thead><tr><th>å—æ®µ</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>code</td><td>num</td><td>返回值</td><td>0:æˆ�功<br>100000: 验è¯�ç �获å�–失败</td></tr><tr><td>message</td><td>str</td><td>错误信æ�¯</td><td>默认为 0</td></tr><tr><td>ttl</td><td>num</td><td>1</td><td></td></tr><tr><td>data</td><td>obj</td><td>ä¿¡æ�¯æœ¬ä½“</td><td></td></tr></tbody></table><p><code>data</code> 对象:</p><table><thead><tr><th>å—æ®µ</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>type</td><td>str</td><td>验è¯�ç �类型</td><td>ç›®å‰�å�ªæœ‰ <code>geetest</code></td></tr><tr><td>token</td><td>str</td><td>验è¯�ç � token</td><td>用于验è¯�</td></tr><tr><td>geetest</td><td>obj</td><td>æž�验ä¿
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">"v_voucher=voucher_ecca35e6-36da-4f38-bd84-b3f420ea08c1"</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></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "code"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "message"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"0"</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "ttl"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "data"</span><span style="color:#D4D4D4;">: {</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "type"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"geetest"</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "token"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"e7abdb050c3d4609979f1685137e3bc0"</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "geetest"</span><span style="color:#D4D4D4;">: {</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "challenge"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"85118f8714875ca4c6d5641bb0ce9ddf"</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "gt"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"ac597a4506fee079629df5d8b66dd4fe"</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;"> },</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "biliword"</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">null</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "phone"</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">null</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "sms"</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">null</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></div></details><h2 id="从验è¯�结果获å�–-grisk-id" tabindex="-1"><a class="header-anchor" href="#从验è¯�结果获å�–-grisk-id"><span>从验è¯�结果获å�– grisk_id</span></a></h2><blockquote><p>https://api.bilibili.com/x/gaia-vgate/v1/validate</p></blockquote><p><em>请求方å¼�: POST</em></p><p><strong>æ£æ–‡å�‚æ•°(application/x-www-form-urlencoded):</strong></p><table><thead><tr><th>å�‚æ•°å��</th><th>类型</th><th>内容</th><th>å¿…è¦�性</th><th>备注</th></tr></thead><tbody><tr><td>csrf</td><td>str</td><td>CSRF Token (ä½�于 Cookie çš„ bili_jct)</td><td>é�žå¿…è¦�</td><td>若登陆则必è¦�</td></tr><tr><td>challenge</td><td>str</td><td>验è¯�ç � challenge</td><td>å¿…è¦�</td><td></td></tr><tr><td>token</td><td>str</td><td>验è¯�ç � token</td><td>å¿…è¦�</td><td></td></tr><tr><td>validate</td><td>str</td><td>验è¯�结果 validate</td><td>å¿…è¦�</td><td></td></tr><tr><td>seccode</td><td>str</td><td>验è¯�结果 seccode</td><td>å¿…è¦�</td><td></td></tr></tbody></table><p><strong>JSON回å¤�:</strong></p><p>æ ¹å¯¹è±¡:</p><table><thead><tr><th>å—æ®µ</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>code</td><td>num</td><td>返回值</td><td>0:æˆ�功<br>-111: csrf æ ¡éªŒå¤±è´¥<br>100003: 验è¯�ç �过期</td></tr><tr><td>message</td><td>str</td><td>错误信æ�¯</td><td>默认为 0</td></tr><tr><td>ttl</td><td>num</td><td>1</td><td></td></tr><tr><td>data</td><td>obj</td><td>ä¿¡æ�¯æœ¬ä½“</td><td></td></tr></tbody></table><p><code>data</code> 对象:</p><table><thead><tr><th>å—æ®µ</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>is_valid</td><td>num</td><td>验è¯�结果</td><td>1:验è¯�æˆ�功</td></tr><tr><td>grisk_id</td><td>str</td><td>gaia_vtoken</td><td>用于æ�¢å¤�æ£å¸¸è®¿é—®</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-shell"><span class="line"><span style="color:#DCDCAA;">curl</span><span style="color:#569CD6;"> -X</span><span style="color:#CE9178;"> POST</span><span style="color:#CE9178;"> "https://api.bilibili.com/x/gaia-vgate/v1/validate"</span><span style="color:#D7BA7D;"> \\</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">"challenge=e4fcb337b8c0427b56320f97e1064210"</span><span style="color:#D7BA7D;"> \\</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">"csrf=xxxxxxxxxxxxxxx"</span><span style="color:#D7BA7D;"> \\</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">"seccode=360f7b9cf75c74c68fbb7475416d0e0d|jordan"</span><span style="color:#D7BA7D;"> \\</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">"token=0e1e58bdff3d4b8aa298e346fed07eeb"</span><span style="color:#D7BA7D;"> \\</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">"validate=360f7b9cf75c74c68fbb7475416d0e0d"</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></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "code"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "message"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"0"</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "ttl"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "data"</span><span style="color:#D4D4D4;">: {</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "is_valid"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
|
|||
|
|
<span class="line"><span style="color:#9CDCFE;"> "grisk_id"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"2e91cf2b67172ca8432fe7c9ab66a5c4"</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></div></details>`,27))])}const b=d(c,[["render",u]]),y=JSON.parse('{"path":"/docs/misc/sign/v_voucher.html","title":"v_voucher 验è¯�","lang":"zh-CN","frontmatter":{},"git":{"updatedTime":1744996652000,"contributors":[{"name":"SessionHu","username":"SessionHu","email":"102411014+SessionHu@users.noreply.github.com","commits":3,"url":"https://github.com/SessionHu"},{"name":"SocialSisterYi","username":"SocialSisterYi","email":"45892418+SocialSisterYi@users.noreply.github.com","commits":1,"url":"https://github.com/SocialSisterYi"}],"changelog":[{"hash":"17b0e43ec2573a3b7f99d5c4c204a4f3b7f9641b","time":1744996652000,"email":"102411014+SessionHu@users.noreply.github.com","author":"SessionHu","message":"feat: add details"},{"hash":"1e24c6b1889160c4c35c01416aa4239501accf5f","time":1726759053000,"email":"102411014+SessionHu@users.noreply.github.com","author":"Sessionå°�胡","message":"调整部分接å�£æ��述与错误修å¤� (#1088)","coAuthors":[{"name":"社会易å§�QwQ","email":"45892418+SocialSisterYi@users.noreply.github.com"}]},{"hash":"60a0c5d1a2f44fe61335da04571305fa7727a968","time":1724238159000,"email":"102411014+SessionHu@users.noreply.github.com","author":"Sessionå°�胡","message":"feat: å�„ç§�接å�£è¡¥å……ä¸Žé”™è¯¯ä¿®æ£ (#1066)"}]},"filePathRelative":"docs/misc/sign/v_voucher.md"}');export{b as comp,y as data};
|