
物联网后端【免费下载链接】OctoPrintOctoPrint is the snappy web interface for your 3D printer!项目地址https://gitcode.com/gh_mirrors/oc/OctoPrint点击查看免费下载导读本文以 OctoPrint 官方 JS 客户端库JS Client Library的util组件为核心系统讲解如何通过OctoPrint.util在浏览器端一键完成文件系统路径检查、URL 可访问性探测、服务器端口连通性测试与主机名 DNS 解析验证。这些能力是 OctoPrint 设置界面中校验用户输入路径、探测网络摄像头与外部服务可用性的基础掌握本文内容后你可以在自己的插件或自定义页面中复用同一套测试能力实现「配置输入即校验」的实战方案。前置条件权限与库加载util组件下的所有方法都要求当前使用的API Token 或浏览器会话具备管理员admin权限这一点在 util.rst 开篇即有明确说明。因为底层接口POST /api/util/test在服务端通过Permissions.ADMIN.require(403)进行权限校验见 server/api/init.py非管理员调用将返回 403。使用前需要先引入 JS 客户端库本体及其依赖jQuery 与 lodash在 OctoPrint 的 Jinja2 模板中最稳妥的方式是利用webassets标签由 OctoPrint 自动处理 URL 前缀{% assets js_client %}script typetext/javascript src{{ ASSET_URL }}/script{% endassets %} script src{{ url_for(static, filenamejs/lib/jquery/jquery.min.js) }}/script script src{{ url_for(static, filenamejs/lib/lodash.min.js) }}/script若你的插件页面运行在 OctoPrint 之外、由自己的 Web 服务托管也可直接引用打包好的静态资源http://你的实例/static/webassets/packed_client.js或按需引用单个组件文件注意所有组件都依赖base组件至少需要同时引入它。具体嵌入方式可参考 jsclientlib/index.rst。组件概览一图看清 util 提供的能力util组件在 JS 客户端库中注册名为util全局单例通过OctoPrint.util访问。它围绕服务端POST /api/util/test这一个端点封装了 5 类检查命令。在 util.js 中可以看到所有方法最终都收敛到统一的test(command, parameters, opts)其内部又调用base组件的issueCommandvar url api/util; var testUrl url /test; OctoPrintUtilClient.prototype.test function (command, parameters, opts) { return this.base.issueCommand(testUrl, command, parameters, opts); };而issueCommand的本质就是把命令名与参数合并后执行一次 JSON POST见 base.jsOctoPrintClient.prototype.issueCommand function (url, command, payload, opts) { payload payload || {}; var data $.extend({}, payload); data.command command; return this.postJson(url, data, opts); };因此理解 util 组件只需抓住「命令 参数 → POST /api/util/test → 返回结构化结果」这条主线。下表汇总了全部方法方法对应命令用途test(command, parameters, opts)任意通用入口执行指定测试命令testPath(path, additional, opts)path检查文件系统路径存在性与权限testExecutable(path, opts)path快捷检查路径存在且可执行testUrl(url, additional, opts)url检查 URL 是否可访问及响应状态testServer(host, port, additional, opts)server检查主机端口是否可达TCP/UDPtestResolution(name, additional, opts)resolution检查主机名是否可被 DNS 解析testAddress(address, additional, opts)address检查地址是否为局域网地址见源码 util.js说明testAddress是客户端源码中已注册、服务端 API 也已支持的检查命令详见 docs/api/util.rst 的address小节但在util.rst中未单独成节本文一并纳入讲解。通用方法 test所有检查的统一入口test(command, parameters, opts)是其余方法的基础当前支持的命令包括path与url服务端实际还支持server、resolution、address见 server/api/init.py。参数说明commandstring要执行的命令如path、url、server、resolution、addressparametersobject命令所需的参数字段不同命令要求不同见下文各小节optsobject请求的附加选项如baseurl、apikey覆盖、timeout等透传给底层请求。返回值一个 jQuery Promisedone回调中可拿到服务端返回的检查结果对象result字段为布尔值表示整体检查是否通过。路径检查testPath 与 testExecutabletestPath(path, additional, opts)测试指定path是否存在并可通过additional对象传入更多检查条件。示例一检查/some/path/to/a/file是否存在OctoPrint.util.testPath(/some/path/to/a/file) .done(function(response) { if (response.result) { // check passed } else { // check failed } });示例二检查路径存在、是普通文件且 OctoPrint 对其拥有读r与执行x权限OctoPrint.util.testPath(/some/path/to/a/file, {check_type: file, check_access: [r, x]}) .done(function(response) { if (response.result) { // check passed } else { // check failed } });参数说明pathstring要测试的路径必填additionalobject附加的测试参数optsobject请求附加选项。additional支持的全部字段如下详见 docs/api/util.rst字段取值说明check_typefile/dir可选。除存在性外还要求路径是指定类型check_accessr/w/x的列表可选。检查 OctoPrint 对路径的读、写、执行权限allow_create_dirtrue/false仅当check_typedir时生效。路径不存在时允许 OctoPrint 创建该目录以便继续测试默认falsecheck_writable_dirtrue/false仅当check_typedir时生效。除权限位外还会实际写入并删除一个小测试文件.testballoon.txt以验证目录真实可写默认false从服务端实现看server/api/init.py_test_path会先对路径做归一化与realpath解析再依次检查存在性、类型、访问权限若路径是损坏的符号链接还会在响应中标记broken_symlink: true。最终result exists and typeok and access。testExecutable(path, opts)快捷方法等价于「路径存在且为文件、且 OctoPrint 可执行」即内部固定使用check_typefile与check_accessxOctoPrint.util.testExecutable(/some/path/to/a/file) .done(function(response) { if (response.result) { // check passed } else { // check failed } });它完全等价于下面的显式写法OctoPrint.util.testPath(/some/path/to/a/file, {access: x}) .done(function(response) { if (response.result) { // check passed } else { // check failed } });该方法的实现位于 util.js注意源码中实际填入的是check_type: file与check_access: x与文档示例等效。典型用途是校验切片器、自定义命令等可执行文件的路径是否配置正确。URL 检查testUrl(url, additional, opts)测试一个 URL 是否可访问并可通过additional传入更细粒度的判定条件。示例一测试http://octopi.local/online.gif可在默认超时内访问并返回非错误状态码OctoPrint.util.testUrl(http://octopi.local/online.gif) .done(function(response) { if (response.result) { // check passed } else { // check failed } });示例二测试网络摄像头快照地址获取原始响应体与响应头这在 Webcam 配置校验中非常实用OctoPrint.util.testUrl(http://octopi.local/webcam/?actionsnapshot, {response: bytes, method: GET}) .done(function(response) { if (response.result) { // check passed var content response.response.content; var mimeType image/jpeg; var headers response.response.headers; if (headers headers[content-type]) { mimeType headers[content-type].split(;)[0]; } var image $(#someimage); image.src data: mimeType ;base64, content; } else { // check failed } });示例三断言对http://example.com/idonotexist的 GET 请求返回 404 或 400OctoPrint.util.testUrl(http://example.com/idonotexist, {status: [400, 404], method: GET}) .done(function(response) { if (response.result) { // check passed } else { // check failed } });参数说明urlstring要测试的 URL必填additionalobject附加测试参数optsobject请求附加选项。additional支持的完整字段见 docs/api/util.rst字段默认值说明methodHEAD用于测试的 HTTP 请求方法timeout3 秒请求超时秒超时视为检查失败validSsltrue当 URL 为 HTTPS 时是否校验 SSL 证书basicAuth无基本认证形如{username: ..., password: ...}digestAuth无Digest 认证形如{username: ..., password: ...}bearerAuth无Bearer Token 字符串会作为Authorization: Bearer token头发送statusnormal期望的单个状态码、状态码列表或命名状态区间见下response无设为true/bytes返回 base64 编码的响应体设为json返回解析后的 JSONcontent_type_allowlist无允许的 MIME 类型列表如[image/*, text/plain]命中范围外则失败content_type_blocklist无禁止的 MIME 类型列表如[video/*]可与 allowlist 组合细化命名状态区间status字段可用的字符串值informational100–199success200–299redirection300–399client_error400–499server_error500–599normal100–399error400–599any100 及以上只要返回状态落在任一指定区间内即视为通过。从服务端实现server/api/init.py可以看到这些命名区间在_test_url内被转换为StatusCodeRange对象进行闭区间判断同时旧的content_type_whitelist/content_type_blacklist参数仍为向后兼容而保留但新实现应使用content_type_allowlist/content_type_blocklist。响应结构URL test result详见 docs/api/util.rst 数据模型章节urlstring被测试的 URLstatusintURL 返回的状态码超时时为 0resultbool是否通过responsestring/object可选请求设置response时返回——bytes模式下为 base64 编码的响应体json模式下为解析后的对象headersobject可选请求设置response时返回的响应头字典。服务器连通性检查testServer(host, port, additional, opts)测试某个主机在某端口上是否可达协议可选 TCP 或 UDP。示例一测试8.8.8.8的 53 端口DNS 服务在默认超时内是否可达OctoPrint.util.testServer(8.8.8.8, 53) .done(function(response) { if (response.result) { // check passed } else { // check failed } });示例二测试127.0.0.1的 1234 端口是否可通过 UDP 到达OctoPrint.util.testServer(127.0.0.1, 1234, {protocol: udp}) .done(function(response) { if (response.result) { // check passed } else { // check failed } });参数说明hoststring要测试的主机IP 或主机名必填portint要测试的端口必填additionalobject附加参数支持protocoltcp或udp默认tcp与timeout秒默认 3.05optsobject请求附加选项。服务端_test_serverserver/api/init.py会将port、timeout、protocol做严格校验非法值返回 400并调用octoprint.util.server_reachable完成实际探测。响应包含host、port、protocol与result四个字段。主机名解析检查testResolution(name, additional, opts)测试一个主机名能否被成功解析DNS 查询。OctoPrint.util.testResolution(octoprint.org) .done(function(response) { if (response.result) { // check passed } else { // check failed } });参数说明namestring要测试的主机名必填additionalobject附加参数optsobject请求附加选项。服务端实现server/api/init.py调用octoprint.util.net.resolve_host(name)只要解析出的地址数量大于 0 即判定result: true。响应包含name与result字段。局域网地址检查testAddress(address, additional, opts)判断给定地址缺省时使用当前客户端的远端地址是否为局域网LAN地址若是则同时返回 CIDR 格式的子网标识。该命令在 docs/api/util.rst 中有完整定义客户端封装见 util.js。// 测试某个地址 OctoPrint.util.testAddress(192.168.1.3) .done(function(response) { if (response.is_lan_address) { // 是 LAN 地址response.subnet 形如 192.168.0.0/16 } });服务端_test_addressserver/api/init.py通过octoprint.util.net.get_lan_ranges()获取 LAN 网段集合用netaddr判断地址归属。响应包含address、is_lan_address以及命中时的subnet字段。这一能力与 OctoPrint 的「可信子网」、局域网登录校验等机制同源server.ipCheck配置同样基于util_net.is_lan_address判断见 server/api/init.py。底层链路与响应语义所有 util 方法最终都落到同一个服务端端点POST /api/util/test。请求体中command字段决定执行哪个检查服务端路由utilTest()server/api/init.py按命令分发给_test_path、_test_url、_test_server、_test_resolution、_test_address五个处理器。一个完整的原生 HTTP 调用示例路径检查POST /api/util/test HTTP/1.1 Host: example.com X-Api-Key: abcdef... Content-Type: application/json { command: path, path: /some/path/to/a/file, check_type: file, check_access: [r, x] }响应HTTP 200{ path: /some/path/to/a/file, exists: true, typeok: true, access: true, result: true }关键语义提醒HTTP 状态码只代表「测试是否成功执行」不代表检查结果本身。无论路径是否存在、URL 是否可达只要请求格式正确服务端都会返回 200判断结果统一看响应体中的result字段各命令的数据模型详见 docs/api/util.rst。实战应用场景综合来看util 组件的典型落地场景包括设置表单即时校验在插件设置页中用户填入切片器路径、可执行文件路径或文件夹路径后立即调用testPath/testExecutable配合check_type、check_access、check_writable_dir等参数把权限问题扼杀在保存之前网络摄像头与外部服务探测用testUrl校验 Webcam 快照地址、用testServer探测内网设备端口、用testResolution确认主机名可解析并把校验结果直观反馈在 UI 上例如示例中把返回的图片以 base64 data URL 直接渲染网络环境判断通过testAddress判断当前客户端是否来自局域网从而动态调整界面行为或安全提示。这些场景也正是 OctoPrint 官方在设置向导与系统配置中校验路径和 URL 时采用的手段——/api/util/test在 API 文档中被明确描述为「OctoPrint 用于校验用户需要在设置中输入的路径或 URL」。延伸阅读完整 API 定义与全部命令参数docs/api/util.rstJS 客户端库总览与嵌入方式docs/jsclientlib/index.rst客户端组件实现src/octoprint/static/js/app/client/util.js请求封装基础组件src/octoprint/static/js/app/client/base.js服务端命令分发与处理器src/octoprint/server/api/init.py赞分享物联网后端【免费下载链接】OctoPrintOctoPrint is the snappy web interface for your 3D printer!项目地址https://gitcode.com/gh_mirrors/oc/OctoPrint点击查看免费下载相关推荐如何用Automated YouTube Channel打造24/7自动运行的YouTube频道终极指南如何用Automated YouTube Channel打造24/7自动运行的YouTube频道终极指南 Automated YouTube Channel是物联网后端解密QtScrcpy从屏幕镜像到批量控制的技术演进之路解密QtScrcpy从屏幕镜像到批量控制的技术演进之路 当开发者需要在电脑上控制手机时通常会面临一个技术难题如何在不安装复杂软件的情况下实现低延迟、高性物联网后端OctoPrint JavaScript 客户端库 Job 模块实战指南查询与操控打印任务OctoPrint JavaScript 客户端库 Job 模块实战指南查询与操控打印任务 OctoPrint 内置的 JavaScript 客户端库JS物联网后端上一篇RuoYi-Vue-Plus社交认证第三方登录下一篇Maka Agent主题与外观设置全攻略暗色模式、调色盘与视觉细节创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考