注册 登录
发贴工具
查看: 103|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] AIWROK软件脚本GET下载文件并检测0KB工具

[复制链接]

2561

主题

2609

帖子

1万

积分

积分
15542
跳转到指定楼层
楼主
AIWROK软件脚本GET下载文件并检测0KB工具
AIWROK软件脚本GET下载文件并检测0KB工具 群发软件发帖工具

  1. // ============================================================================
  2. // GET下载文件并检测0KB工具
  3. // AIWROK官方群: 711841924,苹果群,528816639
  4. // ============================================================================
  5. // 功能说明:
  6. // 1. downloadFile() - GET请求下载图片文件,自动检测Content-Type和0KB空文件
  7. // 2. uploadFile() - POST multipart/form-data方式上传文件到服务器
  8. // 3. downloadWithResume() - 支持断点续传的下载功能,可从中断处继续下载
  9. // 4. batchDownload() - 批量下载管理器,统计成功/失败数量和总文件大小
  10. //
  11. // 使用场景:
  12. // - 图片资源批量下载和验证
  13. // - 大文件断点续传下载
  14. // - 文件上传到远程服务器
  15. // - 自动化测试中的文件操作验证
  16. // ============================================================================

  17. /**
  18. * 检测是否为有效的图片Content-Type
  19. * @param {String} contentType - HTTP响应的Content-Type头部值
  20. * @returns {Boolean} 是否为有效的图片类型(png/jpeg/jpg/gif/webp)
  21. */
  22. function isValidImageContentType(contentType) {
  23.     if (!contentType) return false;
  24.     contentType = contentType.toLowerCase();
  25.     return contentType.indexOf("image/png") !== -1 ||
  26.            contentType.indexOf("image/jpeg") !== -1 ||
  27.            contentType.indexOf("image/jpg") !== -1 ||
  28.            contentType.indexOf("image/gif") !== -1 ||
  29.            contentType.indexOf("image/webp") !== -1;
  30. }

  31. /**
  32. * GET请求下载文件并检测0KB和是否为有效图片
  33. *
  34. * 工作流程:
  35. * 1. 发起GET请求获取文件内容
  36. * 2. 检查Content-Type是否为有效图片格式
  37. * 3. 将响应数据写入本地文件
  38. * 4. 验证文件大小,拒绝0KB空文件
  39. *
  40. * @param {String} url - 下载地址(必须是有效的图片URL)
  41. * @param {String} savePath - 本地保存路径(如/sdcard/Download/test.png)
  42. * @returns {Boolean} 是否成功下载且文件有效(true=成功,false=失败)
  43. *
  44. * 示例:
  45. * var result = downloadFile("https://example.com/image.png", "/sdcard/test.png");
  46. * if (result) {
  47. *     printl("下载成功!");
  48. * }
  49. */
  50. function downloadFile(url, savePath) {
  51.     var http = new okHttp();
  52.     var response = http.get(url);
  53.    
  54.     var contentType = http.getResponseHeaders();
  55.     printl("Content-Type: " + contentType);
  56.    
  57.     if (!isValidImageContentType(contentType)) {
  58.         printl("⚠️ 不是有效的图片类型: " + contentType);
  59.         return false;
  60.     }
  61.    
  62.     var file = new java.io.File(savePath);
  63.     var fos = new java.io.FileOutputStream(file);
  64.     fos.write(response.getBytes());
  65.     fos.close();
  66.    
  67.     var fileSize = file.length();
  68.     printl("文件大小: " + fileSize + " 字节");
  69.    
  70.     if (fileSize === 0) {
  71.         printl("⚠️ 0KB文件: " + savePath);
  72.         return false;
  73.     }
  74.    
  75.     printl("✅ 文件有效: " + (fileSize / 1024).toFixed(2) + " KB");
  76.     return true;
  77. }

  78. // 单独测试0KB检测 - 创建一个0KB的空文件
  79. printl("=== 测试0KB检测 ===");
  80. var emptyFile = new java.io.File("/sdcard/Download/test_0kb.png");
  81. var fos = new java.io.FileOutputStream(emptyFile);
  82. fos.write(new java.lang.String("").getBytes());
  83. fos.close();
  84. printl("创建了0KB空文件: " + emptyFile.getPath());
  85. printl("空文件大小: " + emptyFile.length() + " 字节");

  86. if (emptyFile.length() === 0) {
  87.     printl("✅ 0KB检测正常!文件确实是0字节");
  88. } else {
  89.     printl("❌ 0KB检测异常!文件不是0字节");
  90. }

  91. printl("");

  92. // 使用示例 - 测试不存在的链接
  93. var url1 = "https://www.baidu.com/img/PCfb_5bf088c07f842ccde3f97245555553ea.png";
  94. var savePath1 = "/sdcard/Download/test_not_exist.png";

  95. printl("=== 测试不存在的链接 ===");
  96. printl("URL: " + url1);
  97. var result1 = downloadFile(url1, savePath1);
  98. printl("结果: " + (result1 ? "成功" : "失败"));

  99. printl("");

  100. // 使用示例 - 测试存在的链接
  101. var url2 = "https://www.baidu.com/img/PCfb_5bf082d29588c07f842ccde3f97243ea.png";
  102. var savePath2 = "/sdcard/Download/test_exist.png";

  103. printl("=== 测试存在的链接 ===");
  104. printl("URL: " + url2);
  105. var result2 = downloadFile(url2, savePath2);
  106. printl("结果: " + (result2 ? "成功" : "失败"));

  107. /**
  108. * POST请求上传文件并验证响应
  109. *
  110. * 工作流程:
  111. * 1. 检查本地文件是否存在
  112. * 2. 构建multipart/form-data格式的HTTP请求体
  113. * 3. 读取文件内容并附加到请求中
  114. * 4. 发送POST请求到服务器
  115. * 5. 根据HTTP状态码判断上传是否成功(2xx为成功)
  116. *
  117. * @param {String} uploadUrl - 上传接口地址(如http://example.com/upload)
  118. * @param {String} filePath - 要上传的本地文件完整路径
  119. * @param {String} fieldName - 表单字段名称(服务端接收文件的字段名)
  120. * @returns {Boolean} 是否成功上传(true=成功,false=失败)
  121. *
  122. * 示例:
  123. * var success = uploadFile(
  124. *     "http://api.example.com/upload",
  125. *     "/sdcard/photo.jpg",
  126. *     "file"
  127. * );
  128. */
  129. function uploadFile(uploadUrl, filePath, fieldName) {
  130.     var http = new okHttp();
  131.     var file = new java.io.File(filePath);
  132.    
  133.     if (!file.exists()) {
  134.         printl("❌ 文件不存在: " + filePath);
  135.         return false;
  136.     }
  137.    
  138.     var fileSize = file.length();
  139.     printl("文件大小: " + (fileSize / 1024).toFixed(2) + " KB");
  140.    
  141.     // 构建multipart请求
  142.     var boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
  143.     var requestBody = "--" + boundary + "\r\n" +
  144.                      "Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" + file.getName() + "\"\r\n" +
  145.                      "Content-Type: application/octet-stream\r\n\r\n";
  146.    
  147.     // 读取文件内容
  148.     var fis = new java.io.FileInputStream(file);
  149.     var buffer = new byte[1024];
  150.     var bytesRead;
  151.     while ((bytesRead = fis.read(buffer)) !== -1) {
  152.         requestBody += new java.lang.String(buffer, 0, bytesRead);
  153.     }
  154.     fis.close();
  155.    
  156.     requestBody += "\r\n--" + boundary + "--\r\n";
  157.    
  158.     // 设置请求头
  159.     http.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
  160.    
  161.     var response = http.post(uploadUrl, requestBody);
  162.     var statusCode = http.getStatusCode();
  163.    
  164.     printl("HTTP状态码: " + statusCode);
  165.     printl("响应内容: " + response.substring(0, Math.min(response.length(), 200)));
  166.    
  167.     return statusCode >= 200 && statusCode < 300;
  168. }

  169. /**
  170. * 断点续传下载功能
  171. *
  172. * 工作流程:
  173. * 1. 检查目标文件是否已存在(之前下载的部分)
  174. * 2. 如果存在,获取已下载的大小并设置Range请求头
  175. * 3. 发起带Range头的GET请求(HTTP 206 Partial Content)
  176. * 4. 以追加模式写入文件(保留已有内容)
  177. * 5. 验证最终文件大小
  178. *
  179. * 优势:
  180. * - 网络中断后可从断点继续,无需重新下载
  181. * - 节省流量和时间,特别适合大文件
  182. * - 自动检测和处理部分下载的文件
  183. *
  184. * @param {String} url - 下载地址(服务器需支持Range请求)
  185. * @param {String} savePath - 本地保存路径
  186. * @returns {Boolean} 是否成功下载(true=成功,false=失败)
  187. *
  188. * 示例:
  189. * // 第一次下载中断后,再次调用会继续下载
  190. * downloadWithResume("http://example.com/largefile.zip", "/sdcard/file.zip");
  191. */
  192. function downloadWithResume(url, savePath) {
  193.     var http = new okHttp();
  194.     var file = new java.io.File(savePath);
  195.     var existingSize = 0;
  196.    
  197.     // 检查是否有已下载的部分文件
  198.     if (file.exists()) {
  199.         existingSize = file.length();
  200.         printl("发现已下载部分: " + (existingSize / 1024).toFixed(2) + " KB");
  201.         http.setHeader("Range", "bytes=" + existingSize + "-");
  202.     }
  203.    
  204.     var response = http.get(url);
  205.     var statusCode = http.getStatusCode();
  206.    
  207.     if (statusCode === 206 || (statusCode === 200 && existingSize === 0)) {
  208.         var fos;
  209.         if (existingSize > 0) {
  210.             fos = new java.io.FileOutputStream(file, true); // 追加模式
  211.         } else {
  212.             fos = new java.io.FileOutputStream(file);
  213.         }
  214.         
  215.         fos.write(response.getBytes());
  216.         fos.close();
  217.         
  218.         var finalSize = file.length();
  219.         printl("✅ 下载完成,总大小: " + (finalSize / 1024).toFixed(2) + " KB");
  220.         return true;
  221.     } else {
  222.         printl("❌ 下载失败,状态码: " + statusCode);
  223.         return false;
  224.     }
  225. }

  226. /**
  227. * 批量下载文件并统计结果
  228. *
  229. * 工作流程:
  230. * 1. 遍历下载任务列表
  231. * 2. 对每个任务调用downloadFile()进行下载
  232. * 3. 记录成功/失败数量和累计文件大小
  233. * 4. 输出详细的下载进度和统计信息
  234. * 5. 返回统计结果对象
  235. *
  236. * 特点:
  237. * - 自动统计下载成功率
  238. * - 计算总下载文件大小
  239. * - 提供详细的日志输出
  240. * - 单个文件失败不影响其他文件下载
  241. *
  242. * @param {Array} downloadList - 下载任务数组,每项包含:
  243. *   - url: String - 文件下载地址
  244. *   - path: String - 本地保存路径
  245. * @returns {Object} 统计结果对象:
  246. *   - success: Number - 成功下载的文件数量
  247. *   - failed: Number - 失败的文件数量
  248. *   - totalSize: Number - 所有成功文件的总字节数
  249. *
  250. * 示例:
  251. * var tasks = [
  252. *     {url: "http://example.com/img1.png", path: "/sdcard/img1.png"},
  253. *     {url: "http://example.com/img2.png", path: "/sdcard/img2.png"}
  254. * ];
  255. * var result = batchDownload(tasks);
  256. * printl("成功率: " + (result.success / (result.success + result.failed) * 100) + "%");
  257. */
  258. function batchDownload(downloadList) {
  259.     var successCount = 0;
  260.     var failCount = 0;
  261.     var totalSize = 0;
  262.    
  263.     printl("=== 开始批量下载 ===");
  264.     printl("总共需要下载: " + downloadList.length + " 个文件");
  265.    
  266.     for (var i = 0; i < downloadList.length; i++) {
  267.         var item = downloadList[i];
  268.         printl("\n--- 下载第 " + (i + 1) + " 个文件 ---");
  269.         printl("URL: " + item.url);
  270.         printl("保存路径: " + item.path);
  271.         
  272.         var result = downloadFile(item.url, item.path);
  273.         if (result) {
  274.             successCount++;
  275.             var fileSize = new java.io.File(item.path).length();
  276.             totalSize += fileSize;
  277.         } else {
  278.             failCount++;
  279.         }
  280.     }
  281.    
  282.     printl("\n=== 批量下载完成 ===");
  283.     printl("成功: " + successCount + " 个");
  284.     printl("失败: " + failCount + " 个");
  285.     printl("总大小: " + (totalSize / 1024 / 1024).toFixed(2) + " MB");
  286.    
  287.     return {
  288.         success: successCount,
  289.         failed: failCount,
  290.         totalSize: totalSize
  291.     };
  292. }

  293. // 使用示例 - 批量下载测试
  294. printl("\n=== 批量下载示例 ===");
  295. var downloadTasks = [
  296.     {
  297.         url: "https://www.baidu.com/img/PCfb_5bf082d29588c07f842ccde3f97243ea.png",
  298.         path: "/sdcard/Download/batch_test_1.png"
  299.     },
  300.     {
  301.         url: "https://httpbin.org/image/png",
  302.         path: "/sdcard/Download/batch_test_2.png"
  303.     }
  304. ];

  305. var batchResult = batchDownload(downloadTasks);
  306. printl("批量下载统计: " + JSON.stringify(batchResult));
复制代码



unto安卓脚本HID按键方法完整示例next安卓脚本app方法简单示例
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖