test-douyin-publish.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /**
  2. * 抖音发布可行性测试
  3. *
  4. * 测试内容:
  5. * 1. 验证 Cookie 是否有效
  6. * 2. 获取用户信息
  7. * 3. 尝试访问视频上传接口
  8. */
  9. const axios = require('axios');
  10. // 从你提供的 curl 命令中提取的 Cookie
  11. const TEST_COOKIE = 'x-web-secsdk-uid=dad3a1e2-8a04-479e-b2f7-23e5fb2d3886; gfkadpd=2906,33638; _tea_utm_cache_2906=undefined; csrf_session_id=62637711d69c21ff4bf1659c19031660; bd_ticket_guard_client_web_domain=2; passport_csrf_token=7192948c206b4372d66f598cea1d7c61; passport_csrf_token_default=7192948c206b4372d66f598cea1d7c61; biz_trace_id=373e3792; s_v_web_id=verify_mob7d51c_x0sF5nei_Cco9_4BUu_98sZ_aFkNzoENvP5B; passport_mfa_token=CjflZ3s7mnwLbkofuNtTzy2RsWexDVR6K%2BsIK5%2F25wtrZUHKKJlKLB0odxhfRTaTZZzqnjn%2BRfzNGkoKPAAAAAAAAAAAAABQVsh9LUcYeGk2iu325F3Bec5Pp5ESQKauA5qdZBsXdV7z3GHwkN6zD%2FJMviqOn2GmJxDvyo8OGPax0WwgAiIBAy3dXEI%3D; d_ticket=155055d9db38f2263ee71e2fc00d49f77a031; passport_assist_user=CkF5DKWV1qhlmpMHAtyVnDRmURdZiRjWmCWTEfn4TuROQNv4kdp7TSS47uow1Dmp1gPZyHMpfPkDyhAMMMpTQHiOBBpKCjwAAAAAAAAAAAAAUFbsnhX8yQaNnoGrvUaWJnu6yz67aJ1Utu-MPkDIrHOKT5VI7dMZsDd0j5hnJePaJlUQ78qPDhiJr9ZUIAEiAQMHOYLY; n_mh=NZ66y_3jbT04s2gefO-EMKEB6EsWtjVtv18mMDhVYNc; passport_auth_status=fdb4f4d164ad11b102e78f3885a24dec%2C; passport_auth_status_ss=fdb4f4d164ad11b102e78f3885a24dec%2C; sid_guard=e4f165b3ec9c0c2dd1cf045e27f416e1%7C1776931919%7C5184000%7CMon%2C+22-Jun-2026+08%3A11%3A59+GMT; uid_tt=2bab11562b398876659ba823f98b1f3e; uid_tt_ss=2bab11562b398876659ba823f98b1f3e; sid_tt=e4f165b3ec9c0c2dd1cf045e27f416e1; sessionid=e4f165b3ec9c0c2dd1cf045e27f416e1; sessionid_ss=e4f165b3ec9c0c2dd1cf045e27f416e1; session_tlb_tag=sttt%7C9%7C5PFls-ycDC3RzwReJ_QW4f_________hTYyTymF9qfwYeiMCWpKD1Eb7EiLJtnpA63x9e2YieXo%3D; is_staff_user=false; has_biz_token=false; sid_ucp_v1=1.0.0-KGM0MzY5MjE2ZDQwZDA3NGI1YTQ1MzUxNWRlOWE4MmMwZWQ5Y2QyNTYKIQi-z9Dv0PT1BRDPqKfPBhjaFiAMMObBw_IFOAJA8QdIBBoCbGYiIGU0ZjE2NWIzZWM5YzBjMmRkMWNmMDQ1ZTI3ZjQxNmUx; ssid_ucp_v1=1.0.0-KGM0MzY5MjE2ZDQwZDA3NGI1YTQ1MzUxNWRlOWE4MmMwZWQ5Y2QyNTYKIQi-z9Dv0PT1BRDPqKfPBhjaFiAMMObBw_IFOAJA8QdIBBoCbGYiIGU0ZjE2NWIzZWM5YzBjMmRkMWNmMDQ1ZTI3ZjQxNmUx; _bd_ticket_crypt_doamin=2; _bd_ticket_crypt_cookie=c6e1b35622e0600393a280031b3357a6; __security_mc_1_s_sdk_sign_data_key_web_protect=309e8ad3-49f7-afe1; __security_mc_1_s_sdk_cert_key=490e3cb6-413b-acb2; __security_mc_1_s_sdk_crypt_sdk=157a90f6-4caa-bd08; __security_server_data_status=1; _tea_utm_cache_1128=undefined; passport_fe_beating_status=false; odin_tt=f2253724dbefb92fbe13ef836a6fa43190a0683ba691cd11fe34a8d9c134af4e975e070ea0837822f0348987d6aa95e4ac389fd0b0d713e3dc52e56be6f0cf3d; gd_random=eyJtYXRjaCI6ZmFsc2UsInBlcmNlbnQiOjAuNzQzNTcxODA1MjAxNjQ3MX0=.4bIx4ulWPDUSOUwlmd5J+dXI/dVZDHUPyh178R9Cpm4=; ttwid=1%7CdW6G4pyoNaDJS48gj7TFfY8z_TFJDxxPIfB3TDR3JNI%7C1776932357%7C1ce0dc2ab274c18cb8ffb707c7564c9dd029e72560cfaca33a7e2cbb8e26da86; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCRmVlZWJGWEx1ZGRlanpRSjZGRDAxZ2M1UGxvSlNLR1dsTk5mMjU0RmtlZXVsYVZYQ25wbm5STTdsYXVVT0YzQlJZUUhQM2hsSTQ5WE5lSldkdEcrdm89IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoyfQ%3D%3D';
  12. const USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36';
  13. async function test1_validateCookie() {
  14. console.log('\n===== 测试 1: 验证 Cookie 有效性 =====');
  15. try {
  16. // 使用创作者中心接口测试
  17. const response = await axios.get(
  18. 'https://creator.douyin.com/webcast/api/platform_following/outside/room/v1/live_status',
  19. {
  20. headers: {
  21. 'accept': 'application/json, text/plain, */*',
  22. 'accept-language': 'zh-CN,zh;q=0.9',
  23. 'appid': '3000',
  24. 'Cookie': TEST_COOKIE,
  25. 'priority': 'u=1, i',
  26. 'referer': 'https://creator.douyin.com/creator-micro/home',
  27. 'sec-ch-ua': '"Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"',
  28. 'sec-ch-ua-mobile': '?0',
  29. 'sec-ch-ua-platform': '"Windows"',
  30. 'sec-fetch-dest': 'empty',
  31. 'sec-fetch-mode': 'cors',
  32. 'sec-fetch-site': 'same-origin',
  33. 'user-agent': USER_AGENT,
  34. 'webid': '1156',
  35. 'x-appid': '3000',
  36. 'x-secsdk-csrf-token': '00010000000142644c2227aaed093ff80e3a43964221f0e006f40d9cecdaefd8d4e4645def2118a8ee90760ab3d1',
  37. 'x-sub-web-id': '1156',
  38. },
  39. timeout: 10000,
  40. }
  41. );
  42. console.log('✅ Cookie 有效!');
  43. console.log('状态码:', response.status);
  44. console.log('响应数据:', JSON.stringify(response.data, null, 2));
  45. return true;
  46. } catch (error) {
  47. console.error('❌ Cookie 验证失败');
  48. console.error('状态码:', error.response?.status);
  49. console.error('错误信息:', error.response?.data || error.message);
  50. return false;
  51. }
  52. }
  53. async function test2_getUserInfo() {
  54. console.log('\n===== 测试 2: 获取用户信息 =====');
  55. try {
  56. const response = await axios.get(
  57. 'https://www.douyin.com/aweme/v1/web/user/profile/self/',
  58. {
  59. headers: {
  60. 'accept': 'application/json',
  61. 'Cookie': TEST_COOKIE,
  62. 'referer': 'https://www.douyin.com/',
  63. 'user-agent': USER_AGENT,
  64. },
  65. params: {
  66. 'publish_platform': '1',
  67. 'device_platform': 'web',
  68. },
  69. timeout: 10000,
  70. }
  71. );
  72. if (response.data?.user?.nickname) {
  73. console.log('✅ 获取用户信息成功!');
  74. console.log('用户昵称:', response.data.user.nickname);
  75. console.log('用户ID:', response.data.user.uid);
  76. console.log('头像:', response.data.user.avatar_uri);
  77. return true;
  78. } else {
  79. console.log('⚠️ 未获取到用户信息');
  80. console.log('响应:', JSON.stringify(response.data, null, 2));
  81. return false;
  82. }
  83. } catch (error) {
  84. console.error('❌ 获取用户信息失败');
  85. console.error('状态码:', error.response?.status);
  86. console.error('错误信息:', error.message);
  87. return false;
  88. }
  89. }
  90. async function test3_checkUploadAPI() {
  91. console.log('\n===== 测试 3: 检查视频上传接口 =====');
  92. try {
  93. // 测试创作者中心的上传接口
  94. const response = await axios.get(
  95. 'https://creator.douyin.com/web/api/v1/media/upload/video/permission/',
  96. {
  97. headers: {
  98. 'accept': 'application/json, text/plain, */*',
  99. 'accept-language': 'zh-CN,zh;q=0.9',
  100. 'Cookie': TEST_COOKIE,
  101. 'referer': 'https://creator.douyin.com/creator-micro/content/publish',
  102. 'sec-ch-ua': '"Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"',
  103. 'sec-ch-ua-mobile': '?0',
  104. 'sec-ch-ua-platform': '"Windows"',
  105. 'sec-fetch-dest': 'empty',
  106. 'sec-fetch-mode': 'cors',
  107. 'sec-fetch-site': 'same-origin',
  108. 'user-agent': USER_AGENT,
  109. },
  110. timeout: 10000,
  111. }
  112. );
  113. console.log('✅ 上传权限接口可访问');
  114. console.log('状态码:', response.status);
  115. console.log('响应数据:', JSON.stringify(response.data, null, 2));
  116. return true;
  117. } catch (error) {
  118. console.error('❌ 上传权限接口测试失败');
  119. console.error('状态码:', error.response?.status);
  120. console.error('错误信息:', error.response?.data || error.message);
  121. // 403 或 404 都说明接口存在
  122. if (error.response?.status === 403 || error.response?.status === 404) {
  123. console.log('ℹ️ 接口存在,但可能需要特定参数或权限');
  124. return true;
  125. }
  126. return false;
  127. }
  128. }
  129. async function main() {
  130. console.log('🚀 开始测试抖音发布可行性...\n');
  131. const results = {
  132. cookieValid: false,
  133. userInfo: false,
  134. uploadAPI: false,
  135. };
  136. // 测试 1: Cookie 有效性
  137. results.cookieValid = await test1_validateCookie();
  138. if (!results.cookieValid) {
  139. console.log('\n❌ Cookie 无效,后续测试取消');
  140. console.log('\n建议:');
  141. console.log('1. 重新登录抖音创作者中心');
  142. console.log('2. 从浏览器重新复制 Cookie');
  143. console.log('3. 确保复制了完整的 Cookie');
  144. return;
  145. }
  146. // 测试 2: 获取用户信息
  147. results.userInfo = await test2_getUserInfo();
  148. // 测试 3: 上传接口
  149. results.uploadAPI = await test3_checkUploadAPI();
  150. // 总结
  151. console.log('\n===== 测试总结 =====');
  152. console.log('Cookie 有效性:', results.cookieValid ? '✅ 有效' : '❌ 无效');
  153. console.log('用户信息获取:', results.userInfo ? '✅ 成功' : '❌ 失败');
  154. console.log('上传接口访问:', results.uploadAPI ? '✅ 可访问' : '❌ 不可访问');
  155. if (results.cookieValid && results.userInfo) {
  156. console.log('\n🎉 抖音发布可行性测试通过!');
  157. console.log('\n接下来可以:');
  158. console.log('1. 在发布页面绑定抖音账号');
  159. console.log('2. 粘贴你的 Cookie');
  160. console.log('3. 尝试发布视频');
  161. } else {
  162. console.log('\n⚠️ 部分测试未通过,需要进一步调试');
  163. }
  164. }
  165. // 运行测试
  166. main().catch(console.error);