From MikroTik Wiki
< Manual:Tools
Revision as of 11:26, 21 January 2021 by Normis (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Applies to RouterOS: v6 +


Sub-menu: /tool fetch

Fetch is one of the console tools in Mikrotik RouterOS. It is used to copy files to/from a network device via HTTP, FTP or SFTP (Support for SFTP added on v6.45), it can also be used to sent POST/GET requests and send any kind of data to a remote server. HTTPS protocol is supported; by default no certificate checks are made, but setting check-certificate to yes enables trust chain validation from local certificate store.


Property Description
address (string; Default: ) IP address of the device to copy file from.
as-value (set | not-set; Default: not-set) Store the output in a variable, should be used with the output property.
ascii (yes | no; Default: no)
check-certificate (yes | no; Default: no) Enables trust chain validation from local certificate store.
dst-path (string; Default: ) Destination filename and path
host (string; Default: ) Domain name or virtual domain name (if used on web-site, from which you want to copy information). For example,
In this example the resolved ip address is the same (, but hosts are different.
http-method (|delete|get|post|put; Default: get) the HTTP method to use
http-data (string; Default: ) the data, that is going to be send, when using PUT or POST methods
http-header-field (string; Default: *empty*) list of all header fields and their values, in the form of http-header-field=h1:fff,h2:yyy
keep-result (yes | no; Default: yes) If yes, creates an input file.
mode (ftp|http|tftp {!} https; Default: http) Choose the protocol of connection - http, https , ftp or tftp.
output (none|file|user; Default: file) Sets where to store the downloaded data.
  • none - do not store downloaded data
  • file - store downloaded data in a file
  • user - store downloaded data in the data variable
password (string; Default: anonymous) Password, which is needed for authentication to the remote device.
port (integer; Default: ) Connection port.
src-path (string; Default: ) Title of the remote file you need to copy.
upload (yes | no; Default: no) If enabled then fetch will be used to upload file to remote server. Requires src-path and dst-path parameters to be set.
url (string; Default: ) URL pointing to file. Can be used instead of address and src-path parameters.
user (string; Default: anonymous) User name, which is needed for authentication to the remote device.


Downloading files to the router

The following example shows how to copy the file with filename "conf.rsc" from a device with ip address by FTP protocol and save it as file with filename "123.rsc". User and password are needed to login into the device.

[admin@mt-test] /tool> fetch address= src-path=conf.rsc \
user=admin mode=ftp password=123 dst-path=123.rsc port=21 \
host="" keep-result=yes

Example to upload file to other router:

[admin@mt-test] /tool> fetch address= src-path=conf.rsc \
user=admin mode=ftp password=123 dst-path=123.rsc upload=yes

Another file download example that demonstrates the usage of url property.

[admin@test_host] /> /tool fetch url="" mode=http 
  status: finished

[admin@test_host] /> /file print 
 # NAME                     TYPE                  SIZE                 CREATION-TIME       
 5 netaddresses2.pdf        .pdf file             11547                jun/01/2010 11:59:51

Sending information to a remote host

It is possible to use HTTP POST request to send information to a remote server, that is prepared to accept it. In the following example, we send geographic coordinates to a PHP page:

/tool fetch http-method=post http-header-field="Content-Type: application/json" http-data="{\"lat\":\"56.12\",\"lon\":\"25.12\"}" url=""              

Of course, you can use Fetch with scripts and fill the above command with variables from the RouterOS GPS menu.

Return value to a variable

Since RouterOS v6.43 it is possible to save the result of fetch command to a variable. For example, it is possible to trigger a certain action based on the result that a HTTP page returns. You can find a very simple example below that disables ether2 whenever a PHP page returns "0":

    :local result [/tool fetch url= 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;


Since 6.45beta50 /tool fetch support SFTP (SSH File Transfer Protocol) protocol.

[admin@MikroTik] > /tool fetch url="sftp://" user=x86 password=root dst-path=disk1
      status: downloading
  downloaded: 1048KiB
       total: 51200KiB
    duration: 6s
-- [Q quit|D dump|C-z pause]

[ Top | Back to Content ]