在自动化脚本中如何实现网络访问?

在移动自动化、设备管控、数据采集等场景中,网络请求 是连接设备与云端、实现数据交互的核心能力。自动化脚本可快速实现GET/POST 请求、文件下载、URI 编解码、微服务 / 远程接口调用 等功能,完美适配移动端自动化脚本开发。本文系统讲解平台网络脚本的编写规范、核心 API 用法、异常处理,并提供可直接运行的Demo 源码,帮助开发者快速掌握网络脚本开发,提升自动化效率。

一、冰狐智能辅助网络脚本基础认知

1. 核心特性

  • 语言环境 :基于简化版 JavaScript,语法轻量,易上手,所有脚本以main函数为默认入口。
  • 执行模式同步阻塞,请求完成后才会执行后续代码,逻辑清晰,无需处理异步回调。
  • 返回结构统一 :多数网络 API 返回{state:string, data:string}对象,statesuccess/faileddata为响应内容或错误信息。
  • 移动端适配:支持断点续传、文件存储、系统消息回调,适配手机存储与相册更新。

2. 脚本编写规范

  1. 入口必须为main函数,脚本执行从main开始。
  2. 变量用var声明,不支持复杂 ES6 + 语法。
  3. 网络请求需处理成功 / 失败状态,避免脚本崩溃。
  4. 敏感接口(如文件下载)需申请存储权限。

二、核心网络 API 详解

1. httpGet:基础 GET 请求

作用:对目标 URL 发起同步 GET 请求,用于获取页面、接口数据、查询参数传递等。

参数说明
参数名 类型 必填 说明
url string 目标请求地址,可拼接查询参数
headers object 请求头,如AcceptUser-Agent
返回值
属性名 类型 说明
state string success = 成功,failed = 失败
data string 成功返回响应体,失败返回错误原因
实战 Demo:获取公共接口数据
javascript 复制代码
// 冰狐智能辅助 httpGet 完整Demo
function main() {
    // 1. 定义请求URL与请求头
    var url = "https://api.vvhan.com/api/ip";
    var headers = {
        "Accept": "application/json",
        "User-Agent": "Mozilla/5.0 IceFox Smart Assist"
    };

    // 2. 发起GET请求
    var ret = httpGet(url, headers);

    // 3. 处理响应结果
    if (ret.state === "success") {
        console.log("GET请求成功!响应数据:");
        console.log(ret.data);
        // 可解析JSON(若返回JSON格式)
        try {
            var jsonData = JSON.parse(ret.data);
            console.log("解析后IP:" + jsonData.ip);
        } catch (e) {
            console.log("JSON解析失败:" + e);
        }
    } else {
        console.log("GET请求失败!原因:" + ret.data);
    }
}

2. httpPost:POST 请求(支持表单 / JSON / 文件上传)

作用 :同步 POST 请求,支持x-www-form-urlencodedjsonmultipart/form-data三种格式,覆盖提交表单、上传文件、接口调用等场景。

参数说明
参数名 类型 必填 说明
url string 目标地址
data object/string 请求体,键值对或字符串
headers string/object string=contentType(json/form/text/multipart);object = 完整请求头
实战 Demo1:JSON 格式提交数据
javascript 复制代码
// httpPost JSON请求Demo
function main() {
    var url = "https://httpbin.org/post";
    // 请求体数据
    var postData = {
        username: "icefox_test",
        password: "123456",
        age: 25
    };
    // 第三个参数传"json",自动设置Content-Type为application/json
    var ret = httpPost(url, postData, "json");

    if (ret.state === "success") {
        console.log("POST JSON请求成功:");
        console.log(ret.data);
    } else {
        console.log("POST JSON请求失败:" + ret.data);
    }
}
实战 Demo2:multipart 文件上传
javascript 复制代码
// httpPost 文件上传Demo
function main() {
    var uploadUrl = "https://httpbin.org/post";
    // 构造文件对象(手机本地路径)
    var file = new File("/sdcard/DCIM/Camera/test.jpg");
    var postData = {
        file: file,
        filename: "icefox_upload.jpg",
        uploadTime: new Date().getTime()
    };
    // 第三个参数传"multipart",自动处理文件上传
    var ret = httpPost(uploadUrl, postData, "multipart");

    if (ret.state === "success") {
        console.log("文件上传成功!");
        console.log(ret.data);
    } else {
        console.log("文件上传失败:" + ret.data);
    }
}

3. downloadFile:文件下载(断点续传 + 进度回调)

作用 :下载网络文件,支持断点续传、自定义路径 / 文件名,移动端通过cbMessage回调监听下载状态。

参数说明
参数名 类型 必填 说明
url string 文件下载地址
destFilePath string 存储路径,默认手机外部存储
destFileName string 文件名,默认取 URL 末尾
timeout integer 超时时间,默认 1000000ms
retryCount integer 重试次数,默认 1 次
实战 Demo:带进度提示的音频下载
javascript 复制代码
// downloadFile 完整Demo(含进度回调)
function main() {
    console.log("开始执行文件下载...");
    var fileUrl = "https://downsc.chinaz.net/Files/DownLoad/sound1/202303/y1687.wav";
    // 下载到指定路径,自定义文件名
    var savePath = "/sdcard/icefox_download";
    var fileName = "test_audio.wav";

    // 调用下载API
    var filePath = downloadFile(fileUrl, savePath, fileName, 30000, 2);

    if (filePath) {
        console.log("文件下载完成,本地路径:" + filePath);
        // 图片下载后需更新相册(音频无需)
        // updateAlbum(filePath);
    } else {
        console.log("文件下载失败!");
    }
}

// 系统消息回调:监听下载状态
function cbMessage(msgId, p1, p2) {
    if (msgId === "msg_download_start") {
        Toast.show("开始下载...");
    } else if (msgId === "msg_download_progress") {
        Toast.show("下载进度:" + p1 + "%");
    } else if (msgId === "msg_download_success") {
        Toast.show("下载成功!");
    } else if (msgId === "msg_download_failed") {
        Toast.show("下载失败!");
    }
}

4. URI 编解码:encodeURI/decodeURI

作用:处理 URL 中文、特殊字符编码,避免请求异常。

Demo:URL 参数编解码
javascript 复制代码
function main() {
    // 待编码字符串(含中文)
    var rawStr = "冰狐智能辅助=测试&name=icefox";
    // 编码
    var encoded = encodeURI(rawStr);
    console.log("编码后:" + encoded);
    // 解码
    var decoded = decodeURI(encoded);
    console.log("解码后:" + decoded);

    // 拼接带中文参数的URL
    var url = "https://api.com/search?keyword=" + encodeURI("冰狐网络脚本");
    console.log("最终请求URL:" + url);
}

5. 服务调用:callMicroService/callWebService

  • callMicroService:调用平台自定义微服务,适用于内部业务逻辑扩展。
  • callWebService:调用第三方无权限接口,POST 请求,body 为 JSON。
javascript 复制代码
function main() {
    var url = "https://httpbin.org/post";
    var params = {
        app: "冰狐智能辅助",
        version: "1.0.0",
        func: "callWebService"
    };
    var ret = callWebService(url, params, 15000);
    console.log("远程服务调用结果:" + ret);
}

三、网络脚本开发最佳实践

1. 异常处理

  • 所有网络请求必须判断ret.state,避免空指针异常。
  • JSON 解析用try-catch包裹,防止响应非 JSON 导致崩溃。
  • 文件路径优先使用绝对路径,避免相对路径适配问题。

2. 性能优化

  • 避免循环高频请求,增加延时(如sleep(1000))。
  • 大文件下载用downloadFile断点续传,减少流量消耗。
  • 请求头精简,仅传必要字段。

3. 权限与适配

  • 下载 / 上传文件需开启存储权限
  • 图片下载后调用updateAlbum更新相册。
  • 移动端脚本优先使用cbMessage处理状态,提升用户体验。

四、完整综合实战 Demo

以下 Demo 整合GET 请求、POST 提交、文件下载、URI 编解码,可直接在冰狐智能辅助平台运行:

javascript 复制代码
// 冰狐智能辅助 网络脚本综合Demo
function main() {
    console.log("===== 冰狐网络脚本综合测试开始 =====");

    // 1. URI编解码测试
    var testStr = "冰狐智能辅助_网络测试";
    var encStr = encodeURI(testStr);
    var decStr = decodeURI(encStr);
    console.log("编码:" + encStr + ",解码:" + decStr);

    // 2. httpGet测试
    var getRet = httpGet("https://api.vvhan.com/api/ip", null);
    if (getRet.state === "success") {
        console.log("GET成功:" + getRet.data);
    } else {
        console.log("GET失败:" + getRet.data);
    }

    // 3. httpPost JSON测试
    var postData = {platform: "冰狐智能辅助", type: "网络脚本"};
    var postRet = httpPost("https://httpbin.org/post", postData, "json");
    console.log("POST状态:" + postRet.state);

    // 4. 文件下载测试
    var filePath = downloadFile(
        "https://downsc.chinaz.net/Files/DownLoad/sound1/202303/y1687.wav",
        "/sdcard/icefox",
        "test.wav",
        30000,
        2
    );
    console.log("文件路径:" + filePath);

    console.log("===== 冰狐网络脚本综合测试结束 =====");
}

// 下载状态回调
function cbMessage(msgId, p1, p2) {
    if (msgId === "msg_download_progress") {
        Toast.show("下载进度:" + p1 + "%");
    }
}

五、总结

冰狐智能辅助平台可实现移动端自动化的核心网络需求。从基础的httpGet/httpPost,到支持断点续传的downloadFile,再到 URI 编解码与服务调用,覆盖了数据采集、文件同步、接口对接等绝大多数场景。开发时遵循同步阻塞逻辑、统一返回结构、完善异常处理、权限提前配置四大原则,结合本文提供的 Demo 源码,可快速开发出稳定、健壮的网络脚本,大幅提升移动自动化效率。

相关推荐
优橙教育1 天前
5G网络优化关键参数解读:从入门到实战
网络·学习·5g
zt1985q1 天前
本地部署网页监控工具 Webmonitor 并实现外部访问
运维·服务器·网络·网络协议
dog2501 天前
为何新增网络路径反而引入额外时延
服务器·网络·php
w1wi1 天前
CRA 差距分析完全指南 | 合规落地第一步
网络·人工智能·安全
缪懿1 天前
应用层中的UDP协议原理
网络·网络协议·udp·javaee
hbugs0011 天前
EVE-NG桥接外网的5种方式
开发语言·网络·php·eve-ng·rstp·流量洞察
QuestLab1 天前
③-进阶篇:vLLM实战——多卡部署、压测与排障
linux·服务器·网络
颖火虫盟主1 天前
Claude Code Hook 系统详解与 Hello World 实操
前端·网络·数据库
汤愈韬1 天前
TK_HCIP-Security_FW的可靠性_双机热备场景_上接路由器下接交换机
网络·网络协议·网络安全
优化Henry1 天前
5G基站设备替换过程中因参数配置与硬件不匹配产生的告警排查案例
运维·网络·5g·信息与通信