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

在移动自动化、设备管控、数据采集等场景中,网络请求 是连接设备与云端、实现数据交互的核心能力。自动化脚本可快速实现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 源码,可快速开发出稳定、健壮的网络脚本,大幅提升移动自动化效率。

相关推荐
被摘下的星星3 小时前
路由选择协议技术
网络·智能路由器
威联通安全存储3 小时前
跨国影视协同:SD-WAN 与边缘快取架构解析
网络
Element_南笙4 小时前
VGG网络-深度学习经典架构解析
网络·深度学习·架构
寒秋花开曾相惜4 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发
志栋智能5 小时前
超自动化巡检:让合规与审计变得轻松简单
运维·网络·人工智能·自动化
net3m335 小时前
所有esp_websocket_client_send。。。的地方都加锁,就不容易websocket 断线重连
网络·websocket·网络协议
Jiangxl~6 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
你觉得脆皮鸡好吃吗6 小时前
HTTP (XSS前简单了解)
网络·网络协议·http·网络安全学习
qq_411262426 小时前
四博 AI 智能音箱方案:基于 ESP32-S3 打造远场拾音、多网络接入、可二次开发的 AI 语音终端
网络·人工智能·智能音箱