├── main.py └── a_bogus.js /main.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from py_mini_racer import MiniRacer 3 | 4 | 5 | def init_ctx(): 6 | with open('a_bogus.js', 'r', encoding='utf-8') as f: 7 | js_code = f.read() 8 | ctx = MiniRacer() 9 | ctx.eval(js_code) 10 | return ctx 11 | 12 | 13 | js_context = init_ctx() 14 | 15 | cookies = "自己复制" 16 | 17 | headers = { 18 | 'accept': 'application/json, text/plain, */*', 19 | 'accept-language': 'zh-CN,zh;q=0.9', 20 | 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36', 21 | } 22 | 23 | params = { 24 | 'device_platform': 'webapp', 25 | 'aid': '6383', 26 | 'channel': 'channel_pc_web', 27 | 'publish_video_strategy_type': '2', 28 | 'source': 'channel_pc_web', 29 | 'sec_user_id': 'MS4wLjABAAAAARbzTNzTdRkfL7E8-HKgy5_B7gWHrUpZFGPtj2vGJExStAYWRbnabJFbdVlbr98a', 30 | 'personal_center_strategy': '1', 31 | 'update_version_code': '170400', 32 | 'pc_client_type': '1', 33 | 'version_code': '170400', 34 | 'version_name': '17.4.0', 35 | 'cookie_enabled': 'true', 36 | 'screen_width': '1536', 37 | 'screen_height': '864', 38 | 'browser_language': 'zh-CN', 39 | 'browser_platform': 'Win32', 40 | 'browser_name': 'Chrome', 41 | 'browser_version': '123.0.0.0', 42 | 'browser_online': 'true', 43 | 'engine_name': 'Blink', 44 | 'engine_version': '123.0.0.0', 45 | 'os_name': 'Windows', 46 | 'os_version': '10', 47 | 'cpu_core_num': '16', 48 | 'device_memory': '8', 49 | 'platform': 'PC', 50 | 'downlink': '10', 51 | 'effective_type': '4g', 52 | 'round_trip_time': '50', 53 | 'webid': '7362942367496504871', 54 | 'a_bogus': js_context.call("generate_a_bogus", 55 | 'device_platform=webapp&aid=6383&channel=channel_pc_web&publish_video_strategy_type=2&source=channel_pc_web&sec_user_id=MS4wLjABAAAAARbzTNzTdRkfL7E8-HKgy5_B7gWHrUpZFGPtj2vGJExStAYWRbnabJFbdVlbr98a&personal_center_strategy=1&update_version_code=170400&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1536&screen_height=864&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=123.0.0.0&browser_online=true&engine_name=Blink&engine_version=123.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7362942367496504871', 56 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"), 57 | } 58 | 59 | response = requests.get( 60 | 'https://www.douyin.com/aweme/v1/web/user/profile/other/', 61 | params=params, 62 | cookies=cookies, 63 | headers=headers, 64 | ) 65 | 66 | print(response.text) 67 | -------------------------------------------------------------------------------- /a_bogus.js: -------------------------------------------------------------------------------- 1 | // All the content in this article is only for learning and communication use, not for any other purpose, strictly prohibited for commercial use and illegal use, otherwise all the consequences are irrelevant to the author! 2 | function rc4_encrypt(plaintext, key) { 3 | var s = []; 4 | for (var i = 0; i < 256; i++) { 5 | s[i] = i; 6 | } 7 | var j = 0; 8 | for (var i = 0; i < 256; i++) { 9 | j = (j + s[i] + key.charCodeAt(i % key.length)) % 256; 10 | var temp = s[i]; 11 | s[i] = s[j]; 12 | s[j] = temp; 13 | } 14 | 15 | var i = 0; 16 | var j = 0; 17 | var cipher = []; 18 | for (var k = 0; k < plaintext.length; k++) { 19 | i = (i + 1) % 256; 20 | j = (j + s[i]) % 256; 21 | var temp = s[i]; 22 | s[i] = s[j]; 23 | s[j] = temp; 24 | var t = (s[i] + s[j]) % 256; 25 | cipher.push(String.fromCharCode(s[t] ^ plaintext.charCodeAt(k))); 26 | } 27 | return cipher.join(''); 28 | } 29 | 30 | function le(e, r) { 31 | return (e << (r %= 32) | e >>> 32 - r) >>> 0 32 | } 33 | 34 | function de(e) { 35 | return 0 <= e && e < 16 ? 2043430169 : 16 <= e && e < 64 ? 2055708042 : void console['error']("invalid j for constant Tj") 36 | } 37 | 38 | function pe(e, r, t, n) { 39 | return 0 <= e && e < 16 ? (r ^ t ^ n) >>> 0 : 16 <= e && e < 64 ? (r & t | r & n | t & n) >>> 0 : (console['error']('invalid j for bool function FF'), 40 | 0) 41 | } 42 | 43 | function he(e, r, t, n) { 44 | return 0 <= e && e < 16 ? (r ^ t ^ n) >>> 0 : 16 <= e && e < 64 ? (r & t | ~r & n) >>> 0 : (console['error']('invalid j for bool function GG'), 45 | 0) 46 | } 47 | 48 | function reset() { 49 | this.reg[0] = 1937774191, 50 | this.reg[1] = 1226093241, 51 | this.reg[2] = 388252375, 52 | this.reg[3] = 3666478592, 53 | this.reg[4] = 2842636476, 54 | this.reg[5] = 372324522, 55 | this.reg[6] = 3817729613, 56 | this.reg[7] = 2969243214, 57 | this["chunk"] = [], 58 | this["size"] = 0 59 | } 60 | 61 | function write(e) { 62 | var a = "string" == typeof e ? function (e) { 63 | n = encodeURIComponent(e)['replace'](/%([0-9A-F]{2})/g, (function (e, r) { 64 | return String['fromCharCode']("0x" + r) 65 | } 66 | )) 67 | , a = new Array(n['length']); 68 | return Array['prototype']['forEach']['call'](n, (function (e, r) { 69 | a[r] = e.charCodeAt(0) 70 | } 71 | )), 72 | a 73 | }(e) : e; 74 | this.size += a.length; 75 | var f = 64 - this['chunk']['length']; 76 | if (a['length'] < f) 77 | this['chunk'] = this['chunk'].concat(a); 78 | else 79 | for (this['chunk'] = this['chunk'].concat(a.slice(0, f)); this['chunk'].length >= 64;) 80 | this['_compress'](this['chunk']), 81 | f < a['length'] ? this['chunk'] = a['slice'](f, Math['min'](f + 64, a['length'])) : this['chunk'] = [], 82 | f += 64 83 | } 84 | 85 | function sum(e, t) { 86 | e && (this['reset'](), 87 | this['write'](e)), 88 | this['_fill'](); 89 | for (var f = 0; f < this.chunk['length']; f += 64) 90 | this._compress(this['chunk']['slice'](f, f + 64)); 91 | var i = null; 92 | if (t == 'hex') { 93 | i = ""; 94 | for (f = 0; f < 8; f++) 95 | i += se(this['reg'][f]['toString'](16), 8, "0") 96 | } else 97 | for (i = new Array(32), 98 | f = 0; f < 8; f++) { 99 | var c = this.reg[f]; 100 | i[4 * f + 3] = (255 & c) >>> 0, 101 | c >>>= 8, 102 | i[4 * f + 2] = (255 & c) >>> 0, 103 | c >>>= 8, 104 | i[4 * f + 1] = (255 & c) >>> 0, 105 | c >>>= 8, 106 | i[4 * f] = (255 & c) >>> 0 107 | } 108 | return this['reset'](), 109 | i 110 | } 111 | 112 | function _compress(t) { 113 | if (t < 64) 114 | console.error("compress error: not enough data"); 115 | else { 116 | for (var f = function (e) { 117 | for (var r = new Array(132), t = 0; t < 16; t++) 118 | r[t] = e[4 * t] << 24, 119 | r[t] |= e[4 * t + 1] << 16, 120 | r[t] |= e[4 * t + 2] << 8, 121 | r[t] |= e[4 * t + 3], 122 | r[t] >>>= 0; 123 | for (var n = 16; n < 68; n++) { 124 | var a = r[n - 16] ^ r[n - 9] ^ le(r[n - 3], 15); 125 | a = a ^ le(a, 15) ^ le(a, 23), 126 | r[n] = (a ^ le(r[n - 13], 7) ^ r[n - 6]) >>> 0 127 | } 128 | for (n = 0; n < 64; n++) 129 | r[n + 68] = (r[n] ^ r[n + 4]) >>> 0; 130 | return r 131 | }(t), i = this['reg'].slice(0), c = 0; c < 64; c++) { 132 | var o = le(i[0], 12) + i[4] + le(de(c), c) 133 | , s = ((o = le(o = (4294967295 & o) >>> 0, 7)) ^ le(i[0], 12)) >>> 0 134 | , u = pe(c, i[0], i[1], i[2]); 135 | u = (4294967295 & (u = u + i[3] + s + f[c + 68])) >>> 0; 136 | var b = he(c, i[4], i[5], i[6]); 137 | b = (4294967295 & (b = b + i[7] + o + f[c])) >>> 0, 138 | i[3] = i[2], 139 | i[2] = le(i[1], 9), 140 | i[1] = i[0], 141 | i[0] = u, 142 | i[7] = i[6], 143 | i[6] = le(i[5], 19), 144 | i[5] = i[4], 145 | i[4] = (b ^ le(b, 9) ^ le(b, 17)) >>> 0 146 | } 147 | for (var l = 0; l < 8; l++) 148 | this['reg'][l] = (this['reg'][l] ^ i[l]) >>> 0 149 | } 150 | } 151 | 152 | function _fill() { 153 | var a = 8 * this['size'] 154 | , f = this['chunk']['push'](128) % 64; 155 | for (64 - f < 8 && (f -= 64); f < 56; f++) 156 | this.chunk['push'](0); 157 | for (var i = 0; i < 4; i++) { 158 | var c = Math['floor'](a / 4294967296); 159 | this['chunk'].push(c >>> 8 * (3 - i) & 255) 160 | } 161 | for (i = 0; i < 4; i++) 162 | this['chunk']['push'](a >>> 8 * (3 - i) & 255) 163 | 164 | } 165 | 166 | function SM3() { 167 | this.reg = []; 168 | this.chunk = []; 169 | this.size = 0; 170 | this.reset() 171 | } 172 | SM3.prototype.reset = reset; 173 | SM3.prototype.write = write; 174 | SM3.prototype.sum = sum; 175 | SM3.prototype._compress = _compress; 176 | SM3.prototype._fill = _fill; 177 | 178 | function result_encrypt(long_str, num = null) { 179 | let s_obj = { 180 | "s0": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", 181 | "s1": "Dkdpgh4ZKsQB80/Mfvw36XI1R25+WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=", 182 | "s2": "Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=", 183 | "s3": "ckdp1h4ZKsUB80/Mfvw36XIgR25+WQAlEi7NLboqYTOPuzmFjJnryx9HVGDaStCe", 184 | "s4": "Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe" 185 | } 186 | let constant = { 187 | "0": 16515072, 188 | "1": 258048, 189 | "2": 4032, 190 | "str": s_obj[num], 191 | } 192 | 193 | let result = ""; 194 | let lound = 0; 195 | let long_int = get_long_int(lound, long_str); 196 | for (let i = 0; i < long_str.length / 3 * 4; i++) { 197 | if (Math.floor(i / 4) !== lound) { 198 | lound += 1; 199 | long_int = get_long_int(lound, long_str); 200 | } 201 | let key = i % 4; 202 | switch (key) { 203 | case 0: 204 | temp_int = (long_int & constant["0"]) >> 18; 205 | result += constant["str"].charAt(temp_int); 206 | break; 207 | case 1: 208 | temp_int = (long_int & constant["1"]) >> 12; 209 | result += constant["str"].charAt(temp_int); 210 | break; 211 | case 2: 212 | temp_int = (long_int & constant["2"]) >> 6; 213 | result += constant["str"].charAt(temp_int); 214 | break; 215 | case 3: 216 | temp_int = long_int & 63; 217 | result += constant["str"].charAt(temp_int); 218 | break; 219 | default: 220 | break; 221 | } 222 | } 223 | return result; 224 | } 225 | 226 | function get_long_int(round, long_str) { 227 | round = round * 3; 228 | return (long_str.charCodeAt(round) << 16) | (long_str.charCodeAt(round + 1) << 8) | (long_str.charCodeAt(round + 2)); 229 | } 230 | 231 | function gener_random(random, option) { 232 | return [ 233 | (random & 255 & 170) | option[0] & 85, // 163 234 | (random & 255 & 85) | option[0] & 170, //87 235 | (random >> 8 & 255 & 170) | option[1] & 85, //37 236 | (random >> 8 & 255 & 85) | option[1] & 170, //41 237 | ] 238 | } 239 | 240 | ////////////////////////////////////////////// 241 | function generate_rc4_bb_str(url_search_params, user_agent, window_env_str, suffix = "cus", Arguments = [0, 1, 14]) { 242 | let sm3 = new SM3() 243 | let start_time = Date.now() 244 | /** 245 | * 进行3次加密处理 246 | * 1: url_search_params两次sm3之的结果 247 | * 2: 对后缀两次sm3之的结果 248 | * 3: 对ua处理之后的结果 249 | */ 250 | // url_search_params两次sm3之的结果 251 | let url_search_params_list = sm3.sum(sm3.sum(url_search_params + suffix)) 252 | // 对后缀两次sm3之的结果 253 | let cus = sm3.sum(sm3.sum(suffix)) 254 | // 对ua处理之后的结果 255 | let ua = sm3.sum(result_encrypt(rc4_encrypt(user_agent, String.fromCharCode.apply(null, [0.00390625, 1, 14])), "s3")) 256 | // 257 | let end_time = Date.now() 258 | // b 259 | let b = { 260 | 8: 3, // 固定 261 | 10: end_time, //3次加密结束时间 262 | 15: { 263 | "aid": 6383, 264 | "pageId": 6241, 265 | "boe": false, 266 | "ddrt": 7, 267 | "paths": { 268 | "include": [ 269 | {}, 270 | {}, 271 | {}, 272 | {}, 273 | {}, 274 | {}, 275 | {} 276 | ], 277 | "exclude": [] 278 | }, 279 | "track": { 280 | "mode": 0, 281 | "delay": 300, 282 | "paths": [] 283 | }, 284 | "dump": true, 285 | "rpU": "" 286 | }, 287 | 16: start_time, //3次加密开始时间 288 | 18: 44, //固定 289 | 19: [1, 0, 1, 5], 290 | } 291 | 292 | //3次加密开始时间 293 | b[20] = (b[16] >> 24) & 255 294 | b[21] = (b[16] >> 16) & 255 295 | b[22] = (b[16] >> 8) & 255 296 | b[23] = b[16] & 255 297 | b[24] = (b[16] / 256 / 256 / 256 / 256) >> 0 298 | b[25] = (b[16] / 256 / 256 / 256 / 256 / 256) >> 0 299 | 300 | // 参数Arguments [0, 1, 14, ...] 301 | // let Arguments = [0, 1, 14] 302 | b[26] = (Arguments[0] >> 24) & 255 303 | b[27] = (Arguments[0] >> 16) & 255 304 | b[28] = (Arguments[0] >> 8) & 255 305 | b[29] = Arguments[0] & 255 306 | 307 | b[30] = (Arguments[1] / 256) & 255 308 | b[31] = (Arguments[1] % 256) & 255 309 | b[32] = (Arguments[1] >> 24) & 255 310 | b[33] = (Arguments[1] >> 16) & 255 311 | 312 | b[34] = (Arguments[2] >> 24) & 255 313 | b[35] = (Arguments[2] >> 16) & 255 314 | b[36] = (Arguments[2] >> 8) & 255 315 | b[37] = Arguments[2] & 255 316 | 317 | // (url_search_params + "cus") 两次sm3之的结果 318 | /**let url_search_params_list = [ 319 | 91, 186, 35, 86, 143, 253, 6, 76, 320 | 34, 21, 167, 148, 7, 42, 192, 219, 321 | 188, 20, 182, 85, 213, 74, 213, 147, 322 | 37, 155, 93, 139, 85, 118, 228, 213 323 | ]*/ 324 | b[38] = url_search_params_list[21] 325 | b[39] = url_search_params_list[22] 326 | 327 | // ("cus") 对后缀两次sm3之的结果 328 | /** 329 | * let cus = [ 330 | 136, 101, 114, 147, 58, 77, 207, 201, 331 | 215, 162, 154, 93, 248, 13, 142, 160, 332 | 105, 73, 215, 241, 83, 58, 51, 43, 333 | 255, 38, 168, 141, 216, 194, 35, 236 334 | ]*/ 335 | b[40] = cus[21] 336 | b[41] = cus[22] 337 | 338 | // 对ua处理之后的结果 339 | /** 340 | * let ua = [ 341 | 129, 190, 70, 186, 86, 196, 199, 53, 342 | 99, 38, 29, 209, 243, 17, 157, 69, 343 | 147, 104, 53, 23, 114, 126, 66, 228, 344 | 135, 30, 168, 185, 109, 156, 251, 88 345 | ]*/ 346 | b[42] = ua[23] 347 | b[43] = ua[24] 348 | 349 | //3次加密结束时间 350 | b[44] = (b[10] >> 24) & 255 351 | b[45] = (b[10] >> 16) & 255 352 | b[46] = (b[10] >> 8) & 255 353 | b[47] = b[10] & 255 354 | b[48] = b[8] 355 | b[49] = (b[10] / 256 / 256 / 256 / 256) >> 0 356 | b[50] = (b[10] / 256 / 256 / 256 / 256 / 256) >> 0 357 | 358 | 359 | // object配置项 360 | b[51] = b[15]['pageId'] 361 | b[52] = (b[15]['pageId'] >> 24) & 255 362 | b[53] = (b[15]['pageId'] >> 16) & 255 363 | b[54] = (b[15]['pageId'] >> 8) & 255 364 | b[55] = b[15]['pageId'] & 255 365 | 366 | b[56] = b[15]['aid'] 367 | b[57] = b[15]['aid'] & 255 368 | b[58] = (b[15]['aid'] >> 8) & 255 369 | b[59] = (b[15]['aid'] >> 16) & 255 370 | b[60] = (b[15]['aid'] >> 24) & 255 371 | 372 | // 中间进行了环境检测 373 | // 代码索引: 2496 索引值: 17 (索引64关键条件) 374 | // '1536|747|1536|834|0|30|0|0|1536|834|1536|864|1525|747|24|24|Win32'.charCodeAt()得到65位数组 375 | /** 376 | * let window_env_list = [49, 53, 51, 54, 124, 55, 52, 55, 124, 49, 53, 51, 54, 124, 56, 51, 52, 124, 48, 124, 51, 377 | * 48, 124, 48, 124, 48, 124, 49, 53, 51, 54, 124, 56, 51, 52, 124, 49, 53, 51, 54, 124, 56, 378 | * 54, 52, 124, 49, 53, 50, 53, 124, 55, 52, 55, 124, 50, 52, 124, 50, 52, 124, 87, 105, 110, 379 | * 51, 50] 380 | */ 381 | let window_env_list = []; 382 | for (let index = 0; index < window_env_str.length; index++) { 383 | window_env_list.push(window_env_str.charCodeAt(index)) 384 | } 385 | b[64] = window_env_list.length 386 | b[65] = b[64] & 255 387 | b[66] = (b[64] >> 8) & 255 388 | 389 | b[69] = [].length 390 | b[70] = b[69] & 255 391 | b[71] = (b[69] >> 8) & 255 392 | 393 | b[72] = b[18] ^ b[20] ^ b[26] ^ b[30] ^ b[38] ^ b[40] ^ b[42] ^ b[21] ^ b[27] ^ b[31] ^ b[35] ^ b[39] ^ b[41] ^ b[43] ^ b[22] ^ 394 | b[28] ^ b[32] ^ b[36] ^ b[23] ^ b[29] ^ b[33] ^ b[37] ^ b[44] ^ b[45] ^ b[46] ^ b[47] ^ b[48] ^ b[49] ^ b[50] ^ b[24] ^ 395 | b[25] ^ b[52] ^ b[53] ^ b[54] ^ b[55] ^ b[57] ^ b[58] ^ b[59] ^ b[60] ^ b[65] ^ b[66] ^ b[70] ^ b[71] 396 | let bb = [ 397 | b[18], b[20], b[52], b[26], b[30], b[34], b[58], b[38], b[40], b[53], b[42], b[21], b[27], b[54], b[55], b[31], 398 | b[35], b[57], b[39], b[41], b[43], b[22], b[28], b[32], b[60], b[36], b[23], b[29], b[33], b[37], b[44], b[45], 399 | b[59], b[46], b[47], b[48], b[49], b[50], b[24], b[25], b[65], b[66], b[70], b[71] 400 | ] 401 | bb = bb.concat(window_env_list).concat(b[72]) 402 | return rc4_encrypt(String.fromCharCode.apply(null, bb), String.fromCharCode.apply(null, [121])); 403 | } 404 | 405 | function generate_random_str() { 406 | let random_str_list = [] 407 | random_str_list = random_str_list.concat(gener_random(Math.random() * 10000, [3, 45])) 408 | random_str_list = random_str_list.concat(gener_random(Math.random() * 10000, [1, 0])) 409 | random_str_list = random_str_list.concat(gener_random(Math.random() * 10000, [1, 5])) 410 | return String.fromCharCode.apply(null, random_str_list) 411 | } 412 | 413 | function generate_a_bogus(url_search_params, user_agent) { 414 | /** 415 | * url_search_params:"device_platform=webapp&aid=6383&channel=channel_pc_web&update_version_code=170400&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1536&screen_height=864&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=123.0.0.0&browser_online=true&engine_name=Blink&engine_version=123.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7362810250930783783&msToken=VkDUvz1y24CppXSl80iFPr6ez-3FiizcwD7fI1OqBt6IICq9RWG7nCvxKb8IVi55mFd-wnqoNkXGnxHrikQb4PuKob5Q-YhDp5Um215JzlBszkUyiEvR" 416 | * user_agent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" 417 | */ 418 | let result_str = generate_random_str() + generate_rc4_bb_str( 419 | url_search_params, 420 | user_agent, 421 | "1536|747|1536|834|0|30|0|0|1536|834|1536|864|1525|747|24|24|Win32" 422 | ); 423 | return result_encrypt(result_str, "s4") + "="; 424 | } 425 | 426 | //测试调用 427 | // console.log(generate_a_bogus( 428 | // "device_platform=webapp&aid=6383&channel=channel_pc_web&update_version_code=170400&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1536&screen_height=864&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=123.0.0.0&browser_online=true&engine_name=Blink&engine_version=123.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7362810250930783783&msToken=VkDUvz1y24CppXSl80iFPr6ez-3FiizcwD7fI1OqBt6IICq9RWG7nCvxKb8IVi55mFd-wnqoNkXGnxHrikQb4PuKob5Q-YhDp5Um215JzlBszkUyiEvR", 429 | // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" 430 | // )); --------------------------------------------------------------------------------