Manual:Tools/Fetch: Difference between revisions

From MikroTik Wiki
Jump to navigation Jump to search
No edit summary
 
(11 intermediate revisions by 6 users not shown)
Line 8: Line 8:
<b>Standards:</b> <code></code></p>
<b>Standards:</b> <code></code></p>


Fetch is one of the console tools in Mikrotik RouterOS. It is used to copy files to/from a network device via HTTP or FTP, it can also be used to sent POST/GET requests and send any kind of data to a remote server.
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.
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.


Line 23: Line 23:
|default=
|default=
|desc=IP address of the device to copy file from.
|desc=IP address of the device to copy file from.
}}
{{Mr-arg-table
|arg=as-value
|type=set {{!}} not-set
|default=not-set
|desc=Store the output in a variable, should be used with the <var>output</var> property.
}}
}}


Line 70: Line 77:


{{Mr-arg-table
{{Mr-arg-table
|arg=http-content-type
|arg=http-header-field
|type=string
|type=string
|default=application/x-www-form-urlencoded
|default=*empty*
|desc=the [https://en.wikipedia.org/wiki/Media_type#Common_examples MIME type] of the data you are going to send via POST/GET.
|desc=list of all header fields and their values, in the form of <code>http-header-field=h1:fff,h2:yyy</code>
}}
}}


Line 89: Line 96:
|desc=Choose the protocol of connection - http, https , ftp or tftp.
|desc=Choose the protocol of connection - http, https , ftp or tftp.
}}
}}
{{Mr-arg-table
|arg=output
|type=none{{!}}file{{!}}user
|default=file
|desc=Sets where to store the downloaded data.
* <code>none</code> - do not store downloaded data
* <code>file</code> - store downloaded data in a file
* <code>user</code> - store downloaded data in the <var>data</var> variable
}}


{{Mr-arg-table
{{Mr-arg-table
Line 167: Line 186:


<pre>
<pre>
/tool fetch http-method=post http-content-type="application/json" http-data="{\"lat\":\"56.12\",\"lon\":\"25.12\"}" url="http://testserver.lv/index.php"               
/tool fetch http-method=post http-header-field="Content-Type: application/json" http-data="{\"lat\":\"56.12\",\"lon\":\"25.12\"}" url="http://testserver.lv/index.php"               
</pre>
</pre>


Of course, you can use Fetch with scripts and fill the above command with variables from the RouterOS GPS menu.  
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 ====  
==== Return value to a variable ====  


Since RouterOS v6.43rc64 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 that disables '''ether2''' whenever a PHP page returns "0":
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":
<pre>
<pre>
{
{
Line 187: Line 206:
}
}
</pre>
</pre>
==== SFTP ====
Since 6.45beta50 <code>/tool fetch</code> support SFTP (SSH File Transfer Protocol) protocol.
<pre>
[admin@MikroTik] > /tool fetch url="sftp://10.155.126.200/home/x86/Desktop/50MB.zip" user=x86 password=root dst-path=disk1
      status: downloading
  downloaded: 1048KiB
      total: 51200KiB
    duration: 6s
-- [Q quit|D dump|C-z pause]
</pre>


{{cont}}
{{cont}}

Latest revision as of 13:26, 21 January 2021

Applies to RouterOS: v6 +

Summary

Sub-menu: /tool fetch
Standards:

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.

Properties

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,
address=wiki.mikrotik.com host=forum.mikrotik.com
In this example the resolved ip address is the same (66.228.113.27), 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.

Examples

Downloading files to the router

The following example shows how to copy the file with filename "conf.rsc" from a device with ip address 192.168.88.2 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=192.168.88.2 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=192.168.88.2 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="http://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                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="http://testserver.lv/index.php"              

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=http://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;
        }
    }
}


SFTP

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

[admin@MikroTik] > /tool fetch url="sftp://10.155.126.200/home/x86/Desktop/50MB.zip" 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 ]