Fetch
Fetch 是 RouterOS 的一个实用工具,可通过 HTTP、HTTPS、FTP、TFTP 和 SFTP 传输文件,具有可配置的身份验证、压缩、重定向和变量存储选项。它支持下载/上传模式以及用于定向传输的 VRF 集成。
Fetch
Fetch 是 RouterOS 控制台实用工具,用于复制文件和执行基于 HTTP 的请求。它支持 HTTP、HTTPS、FTP、TFTP 和 SFTP,允许向远程服务器上传、下载以及执行任意 GET 或 POST 操作。
所有参数记录在 /tool/fetch CLI 参考中。
配置示例
以下示例展示如何通过 FTP 协议从 IP 地址为 192.168.88.2 的设备复制文件 "conf.rsc" 并保存为 "123.rsc"。登录设备需要用户名和密码。
[admin@MikroTik] /tool> fetch address=192.168.88.2 src-path=conf.rsc user=admin mode=ftp password=123 dst-path=123.rsc port=21 host="" keep-result=yes
上传文件到另一台路由器的示例:
[admin@MikroTik] /tool> fetch address=192.168.88.2 src-path=conf.rsc user=admin mode=ftp password=123 dst-path=123.rsc upload=yes
另一个文件下载示例,演示 url 属性的用法:
[admin@MikroTik] /> /tool/fetch url="https://www.mikrotik.com/img/netaddresses2.pdf" mode=http
status: finished
[admin@test_host] /> /file/print
# NAME TYPE SIZE CREATION-TIME
...
5 netaddresses2.pdf .pdf file 11547 2010-06-01 11:59:51
通过 VRF 运行 fetch
您可以通过在 "@" 符号后附加 VRF 名称,让 /tool/fetch 通过特定的 VRF 运行:
- 在 URL 中 —
url="http://192.168.88.2@vrf1/…"(适用于 HTTP/HTTPS,不适用于 SFTP)。 - 在
address属性中 —address=192.168.88.2@vrf1 - 作为单独的
address参数 —address=@vrf1,与提供 IP 的 URL 结合使用。
address 属性可以与 VRF 组合并用 "@" 分隔(address=192.168.88.2@vrf1),或者简单地作为带有 "@" 符号(在 VRF 名称之前)的 address 参数,如下所示(使用 URL 中的地址,并将其与 address 参数中的 VRF 名称组合):
[admin@MikroTik] /> /tool/fetch url="sftp://192.168.88.2" address=@test src-path=test.txt user=admin password="" upload=yes
status: finished
向远程主机发送信息
可以使用 HTTP POST 请求向准备好接收信息的远程服务器发送信息。在以下示例中,地理坐标被发送到 PHP 页面:
/tool/fetch http-method=post http-header-field="Content-Type:application/json" http-data="{\"lat\":\"56.12\",\"lon\":\"25.12\"}" url="https://testserver.lv/index.php"
在此示例中,数据作为文件上传。由于可变数据来自文件,文件大小最多只能为 4 KB。这是 RouterOS 变量的限制。
/export file=export.rsc
:global data [/file/get [/file/find name=export.rsc] contents];
:global url "https://prod-51.westeurope.logic.azure.com:443/workflows/blabla/triggers/manual/paths/invoke....";
/tool/fetch mode=https http-method=put http-data=$data url=$url
将返回值存入变量
可以将 fetch 命令的结果保存到变量中。
示例 1
您可以根据 HTTP 页面返回的结果触发特定操作。以下示例在 PHP 页面返回 "0" 时禁用 ether2:
{
:local result [/tool/fetch url=https://10.0.0.1/disable_ether2.php as-value output=user];
:if ($result->"status" = "finished") do={
:if ($result->"data" = "0") do={
/interface/ethernet/set ether2 disabled=yes;
} else={
/interface/ethernet/set ether2 disabled=no;
}
}
}
示例 2
当 fetch 失败时,可以访问错误代码("code")和返回的 HTTP 头("http-headers"):
:onerror err,attr in={ /tool/fetch http://127.0.0.1/error as-value} do={:put $err;:put ($attr->"code");:put ($attr->"http-headers")}
failure: Status 404, Not Found
404
Cache-Control: no-store;Connection: Keep-Alive;Content-Length: 99;Content-Type: text/html;Date: Tue, 09 Dec 2025 13:27:44 GMT;Expires: 0;Pragma: no-cache;X-Frame-Options: sameorigin