|
Õâ¶Î´úÂëÊÇÒ»¸öÓÃÓÚ´ÓÀ¶×àÔÆ£¨Lanzou£©ÏÂÔØÎļþµÄ×Ô¶¯»¯¹¤¾ß ½Å±¾£¬Ö÷Òª»ùÓÚJavaScript±àд£¬²¢ÇÒÊÇÔÚÒ»¸ö°²×¿×Ô¶¯»¯»·¾³ÖÐÔËÐеģ¬ÀýÈçʹÓÃAiWorkÕâÑùµÄ×Ô¶¯»¯IDE¡£´úÂëÖж¨ÒåÁËÒ»¸öÖ÷ÒªµÄº¯ÊýdownloadLanzouFile£¬Ëü½ÓÊÜÈý¸ö²ÎÊý£ºÎļþµÄURLµØÖ·url£¬±£´æÎļþµÄ·¾¶saveFilePath£¬ÒÔ¼°×î´óÖØÊÔ´ÎÊýmaxRetries£¨Èç¹ûδÌṩ£¬º¯ÊýĬÈÏÉèÖÃΪ5´Î£©¡£ ´úÂëµÄÖ÷Òª¹¦ÄܺͲ½ÖèÈçÏ£º
- ¶¨ÒåÁËÀ¶×àÔƵı¸ÓÃÓòÃûÁÐ±í£¬ÒÔ±ãÔÚÓöµ½Ä³¸öÓòÃûÎÞ·¨·ÃÎÊʱ½øÐÐÇл»¡£
- ¶¨ÒåÁËÒ»¸ösleepº¯ÊýÓÃÓÚÏß³ÌÐÝÃߣ¬ÒÔ±ãÔÚÖØÊÔÖ®¼äµÈ´ýÒ»¶Îʱ¼ä¡£
- ¶¨ÒåÁËÁ½¸ö¸¨Öúº¯Êý£ºgetWaitTimeÓÃÓÚ¼ÆËãÿ´ÎÖØÊÔʱµÄµÈ´ýʱ¼ä£¬²ÉÓÃÖ¸ÊýÍ˱ÜËã·¨£»formatTimeÓÃÓÚ½«ºÁÃëÊý¸ñʽ»¯Îª¸üÒ׶ÁµÄʱ¼ä¸ñʽ¡£
- ʹÓÃÒ»¸öforÑ»·À´ÊµÏÖÏÂÔصÄÖØÊÔ»úÖÆ£¬Ã¿´ÎÓöµ½´íÎóʱ»áÔö¼ÓÖØÊÔ´ÎÊý¡£
- ÔÚÿ´ÎÖØÊÔ֮ǰ£¬Í¨¹ýsleepº¯ÊýµÈ´ýÒ»¶Îʱ¼ä£¬Ê±¼ä»áËæ×ÅÖØÊÔ´ÎÊýÔö¼Ó¶øÔö¼Ó¡£
- ʹÓÃokHttp¿âÀ´·¢ËÍHTTPÇëÇó£¬Ê×ÏÈ»ñÈ¡³õʼҳÃæÄÚÈÝ¡£
- ½âÎö³õʼҳÃæÒÔ»ñÈ¡Ìøת·¾¶£¬²¢·ÃÎʶþ¼¶Ò³ÃæÒÔ»ñÈ¡ÎļþµÄÇ©Ãû²ÎÊýsign¡£
- ͨ¹ý½âÎö¶þ¼¶Ò³ÃæµÄHTMLÄÚÈÝ£¬»ñÈ¡ÓÃÓÚÏÂÔØÎļþµÄAJAXÇëÇóURL¡£
- ÅäÖÃHTTPÇëÇóÍ·£¬Ä£Äâä¯ÀÀÆ÷ÐÐΪ£¬ÒÔ»ñÈ¡ÕýÈ·µÄÏÂÔصØÖ·¡£
- ¹¹ÔìPOSTÇëÇóµÄÊý¾Ý£¬°üÀ¨Ç©ÃûÐÅÏ¢µÈ£¬·¢ËÍPOSTÇëÇóÒÔ»ñÈ¡ÏÂÔصØÖ·¡£
- ÏÂÔØÎļþ²¢Í¨¹ýformatFileSizeº¯Êý¸ñʽ»¯Êä³öÎļþ´óС¡£
- ¼ì²éÎļþ´óСÊÇ·ñÒ쳣С£¬ÒÔÅжÏÎļþÊÇ·ñÏÂÔØÍêÕû¡£
- Èç¹ûÔÚÏÂÔعý³ÌÖÐÓöµ½ÈκδíÎó£¨ÈçÎļþ²»´æÔÚ¡¢·þÎñÆ÷·µ»Ø´íÎóÒ³Ãæ¡¢ÎÞ·¨½âÎöJSONµÈ£©£¬»á±»²¶»ñ²¢Êä³ö´íÎóÐÅÏ¢¡£
- Èç¹ûÔÚ×î´óÖØÊÔ´ÎÊýÄÚÈÔδÄܳɹ¦ÏÂÔØÎļþ£¬º¯Êý½«·µ»Øfalse£¬±íʾÏÂÔØʧ°Ü¡£
- formatFileSizeº¯ÊýÓÃÓÚ½«Îļþ´óС´Ó×Ö½Úת»»ÎªKB¡¢MB»òGB£¬²¢±£ÁôÁ½Î»Ð¡Êý¡£
- ÌṩÁËÒ»¸öʹÓÃʾÀý£¬Õ¹Ê¾ÁËÈçºÎµ÷ÓÃdownloadLanzouFileº¯ÊýÀ´ÏÂÔØÎļþ£¬²¢¸ù¾Ý·µ»Ø½á¹ûÅжÏÎļþÊÇ·ñ³É¹¦ÏÂÔØ¡£
- /*
- »¶ÓʹÓÃAiWork°²×¿×Ô¶¯»¯IDE
- */
- // ¶¨ÒåÖ÷º¯Êý
- function downloadLanzouFile(url, saveFilePath, maxRetries) {
- // ÉèÖÃĬÈϲÎÊý
- if (maxRetries === undefined) {
- maxRetries = 5; // Ôö¼ÓĬÈÏÖØÊÔ´ÎÊý
- }
-
- var http = new okHttp();
- var domains = ["wwt.lanzouu.com", "wwt.lanzoui.com", "wwt.lanzoux.com"]; // ±¸ÓÃÓòÃû
- var currentDomain = domains[0];
- var startTime = new Date().getTime();
-
- function sleep(ms) {
- java.lang.Thread.sleep(ms);
- }
-
- // Ö¸ÊýÍ˱ÜËã·¨¼ÆËãµÈ´ýʱ¼ä
- function getWaitTime(retryCount) {
- return Math.min(2000 * Math.pow(1.5, retryCount), 10000); // ×µÈ´ý10Ãë
- }
-
- function formatTime(ms) {
- if (ms < 1000) return ms + "ºÁÃë";
- return Math.floor(ms / 1000) + "Ãë";
- }
-
- for (var retryCount = 0; retryCount < maxRetries; retryCount++) {
- if (retryCount > 0) {
- var waitTime = getWaitTime(retryCount);
- printl("µÚ" + (retryCount + 1) + "´Î³¢ÊÔÏÂÔØ...(µÈ´ý" + formatTime(waitTime) + ")");
-
- // ÿ´ÎÖØÊÔʱ³¢ÊÔÇл»ÓòÃû
- currentDomain = domains[retryCount % domains.length];
- printl("Çл»µ½ÓòÃû: " + currentDomain);
-
- sleep(waitTime);
- }
-
- try {
- printl("¿ªÊ¼ÏÂÔعý³Ì...");
-
- // »ñÈ¡³õʼҳÃæ
- printl("ÕýÔÚ»ñÈ¡³õʼҳÃæ...");
- var processedUrl = url.replace(/wwt\.lanzo[a-z]{1,2}\.com/, currentDomain);
- var r = http.get(processedUrl);
-
- // ¼ì²éÊÇ·ñ°üº¬´íÎóÐÅÏ¢
- if (r.includes("Îļþ²»´æÔÚ") || r.includes("Òѱ»É¾³ý")) {
- throw "Îļþ²»´æÔÚ»òÒѱ»É¾³ý";
- }
-
- // »ñÈ¡Ìøת·¾¶
- var regex = /\/fn\?[\w-]+/g;
- var fnPathMatch = r.match(regex);
- if (!fnPathMatch) {
- throw "ÎÞ·¨»ñÈ¡Ìøת·¾¶";
- }
- var fnPath = fnPathMatch[0];
- printl("»ñÈ¡Ìøת·¾¶:", fnPath);
- // »ñÈ¡¶þ¼¶Ò³Ãæ
- var r2 = http.get("https://" + currentDomain + fnPath);
- printl("ÒÑ»ñÈ¡¶þ¼¶Ò³Ãæ");
-
- // ¼ì²é¶þ¼¶Ò³ÃæÊÇ·ñÓÐЧ
- if (r2.includes("Îļþ²»´æÔÚ") || r2.includes("Òѱ»É¾³ý")) {
- throw "Îļþ²»´æÔÚ»òÒѱ»É¾³ý";
- }
- // ʹÓøü¾«È·µÄÕýÔòÆ¥Åäsign
- var signMatch = r2.match(/var wp_sign = '([^']+)';/);
- if (!signMatch) {
- throw "ÎÞ·¨ÌáÈ¡Ç©Ãû²ÎÊý";
- }
- var sign = signMatch[1];
- printl("»ñÈ¡Ç©Ãû:", sign);
- // Æ¥ÅäajaxÇëÇ󷾶
- var ajaxPathMatch = r2.match(/url : '(\/ajaxm\.php\?file=\d+)'/);
- if (!ajaxPathMatch) {
- throw "ÎÞ·¨ÌáÈ¡ajax·¾¶";
- }
- var ajaxUrl = "https://" + currentDomain + ajaxPathMatch[1];
- printl("¹¹ÔìÇëÇóµØÖ·:", ajaxUrl);
- // ÅäÖÃÇëÇóÍ·
- http.clearHeader();
- http.setHeader('Referer', "https://" + currentDomain + fnPath);
- http.setHeader('User-Agent', "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36");
- http.setHeader('X-Requested-With', 'XMLHttpRequest');
- http.setHeader('Origin', "https://" + currentDomain);
- http.setHeader('Content-Type', 'application/x-www-form-urlencoded');
- http.setHeader('Accept', 'application/json, text/javascript, */*; q=0.01');
- http.setHeader('Accept-Language', 'zh-CN,zh;q=0.9,en;q=0.8');
- http.setHeader('Connection', 'keep-alive');
- http.setHeader('Cache-Control', 'no-cache');
- http.setHeader('Pragma', 'no-cache');
- // ¹¹ÔìPOSTÊý¾Ý
- var data = new map();
- data.add('action', 'downprocess');
- data.add('signs', sign.substring(0, 5));
- data.add('sign', sign);
- data.add('websign', '');
- data.add('websignkey', '61rx');
- data.add('ves', 1);
- // ·¢ËÍPOSTÇëÇó
- var postRes = http.post(ajaxUrl, data);
-
- // ¼ì²éÊÇ·ñ·µ»ØÁË´íÎóÒ³Ãæ
- if (postRes.includes("<!DOCTYPE html>") || postRes.includes("405")) {
- throw "·þÎñÆ÷·µ»ØÁË´íÎóÒ³Ã棬ÐèÒªÖØÊÔ";
- }
-
- try {
- var postData = JSON.parse(postRes);
-
- if (!postData.dom || !postData.url) {
- throw "ÎÞ·¨»ñÈ¡ÏÂÔØÐÅÏ¢";
- }
-
- // »ñÈ¡ÏÂÔصØÖ·
- var downloadUrl = postData.dom + "/file/" + postData.url;
- printl("³õʼÏÂÔصØÖ·:", downloadUrl);
-
- // ³¢ÊÔÖ±½Ó·ÃÎÊÏÂÔصØÖ·£¬ÉèÖøúËæÖض¨Ïò
- printl("³¢ÊÔÖ±½Ó·ÃÎÊÏÂÔصØÖ·...");
- http.clearHeader();
- http.setHeader('User-Agent', "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36");
- http.setHeader('Accept', "*/*");
- http.setHeader('Accept-Language', "zh-CN,zh;q=0.9,en;q=0.8");
- http.setHeader('Referer', "https://" + currentDomain + "/");
- http.setHeader('Connection', 'keep-alive');
-
- // Ö±½Ó³¢ÊÔÏÂÔØÎļþ
- printl("¿ªÊ¼ÏÂÔØÎļþ...");
- var downloadStartTime = new Date().getTime();
- http.downloadFile(downloadUrl, saveFilePath);
- var downloadEndTime = new Date().getTime();
- var downloadTime = downloadEndTime - downloadStartTime;
-
- printl("ÎļþÏÂÔØÍê³É£¬ºÄʱ: " + formatTime(downloadTime));
-
- // ¼ì²éÎļþ´óС
- try {
- var file = new java.io.File(saveFilePath);
- var fileSize = file.length();
- printl("Îļþ´óС: " + formatFileSize(fileSize));
-
- if (fileSize < 1024) { // Èç¹ûÎļþСÓÚ1KB£¬¿ÉÄÜÊÇ´íÎóÒ³Ãæ
- printl("¾¯¸æ: Îļþ´óСÒ쳣С£¬¿ÉÄÜÏÂÔز»ÍêÕû");
- }
- } catch (e) {
- printl("ÎÞ·¨»ñÈ¡ÎļþÐÅÏ¢: " + e);
- }
-
- var totalTime = new Date().getTime() - startTime;
- printl("×ܺÄʱ: " + formatTime(totalTime));
- return true; // ÏÂÔسɹ¦£¬Í˳öÖØÊÔÑ»·
-
- } catch (jsonError) {
- printl("½âÎöJSONʧ°Ü: " + jsonError + ", ÏìÓ¦ÄÚÈÝ: " + postRes.substring(0, 100));
- throw "ÎÞ·¨½âÎö·þÎñÆ÷ÏìÓ¦";
- }
-
- } catch (error) {
- printl("µ±Ç°³¢ÊÔ³ö´í: " + error);
- if (retryCount === maxRetries - 1) {
- // ×îºóÒ»´Î³¢ÊÔҲʧ°ÜÁË
- printl("ËùÓÐÖØÊÔ¶¼Ê§°ÜÁË");
- return false;
- }
- // ·ñÔò¼ÌÐøÏÂÒ»´ÎÖØÊÔ
- continue;
- }
- }
- return false;
- }
- // ¸ñʽ»¯Îļþ´óС
- function formatFileSize(bytes) {
- if (bytes < 1024) return bytes + " B";
- else if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + " KB";
- else if (bytes < 1024 * 1024 * 1024) return (bytes / (1024 * 1024)).toFixed(2) + " MB";
- else return (bytes / (1024 * 1024 * 1024)).toFixed(2) + " GB";
- }
- // ʹÓÃʾÀý
- var url = "https://wwwgmg.lanzn.com/tomatoOCR";
- var saveFilePath = "/sdcard/Download/TomatoOCR.apk";
- var result = downloadLanzouFile(url, saveFilePath);
- if (result) {
- printl("Îļþ³É¹¦ÏÂÔص½: " + saveFilePath);
- } else {
- printl("ÎļþÏÂÔØʧ°Ü");
- }
¸´ÖÆ´úÂë
|
|