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