<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
<title>Get Task</title>
</head>

<body>

<h2><a name="get">Get</a></h2>
<h3>Description</h3>
<p>Gets files from URLs.  When the verbose option is &quot;on&quot;, this task
displays a '.' for every 100 Kb retrieved. Any URL schema supported by
the runtime is valid here, including http:, ftp: and jar:; 
</p>
The <i>usetimestamp</i> option enables you to control downloads so that the remote file is
only fetched if newer than the local copy. If there is no local copy, the download always takes 
place. When a file is downloaded, the timestamp of the downloaded file is set to the remote timestamp. 
NB: This timestamp facility only works on downloads using the HTTP protocol. 
<p>
A username and password can be specified, in which case basic 'slightly encoded
plain text' authentication is used. This is only secure over an HTTPS link.
</p>

<p><b>Proxies</b>. Since Apache Ant 1.7.0, Ant running on Java1.5 or later can
  <a href="../proxy.html">use the proxy settings of the operating
    system</a> if enabled with the
  <code>-autoproxy</code> option. There is also the
  <a href="../Tasks/setproxy.html">&lt;setproxy&gt;</a> task
  for earlier Java versions. With proxies turned
  on, <code>&lt;get&gt;</code> requests against localhost may not work
  as expected, if the request is relayed to the proxy.</p>
 
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">src</td>
    <td valign="top">the URL from which to retrieve a file.</td>
    <td align="center" valign="top">Yes or a nested resource collection</td>
  </tr>
  <tr>
    <td valign="top">dest</td>
    <td valign="top">the file or directory where to store the
      retrieved file(s).</td>
    <td align="center" valign="top">Yes</td>
  </tr>
  <tr>
    <td valign="top">verbose</td>
    <td valign="top">show verbose progress information (&quot;on&quot;/&quot;off&quot;).</td>
    <td align="center" valign="top">No; default "false"</td>
  </tr>
  <tr>
    <td valign="top">quiet</td>
    <td valign="top">Log errors only.(&quot;true&quot;/&quot;false&quot;).</td>
    <td align="center" valign="top">No; default "false"</td>
  </tr>
  <tr>
    <td valign="top">ignoreerrors</td>
    <td valign="top">Log errors but don't treat as fatal.</td>
    <td align="center" valign="top">No; default "false"</td>
  </tr>
  <tr>
    <td valign="top">usetimestamp</td>
    <td valign="top">conditionally download a file based on the timestamp of the
    local copy. HTTP only</td>
    <td align="center" valign="top">No; default "false"</td>
  </tr>
  <tr>
    <td valign="top">username</td>
    <td valign="top">username for 'BASIC' http authentication</td>
    <td align="center" valign="top">if password is set</td>
  </tr>  
  <tr>
    <td valign="top">password</td>
    <td valign="top">password: required </td>
    <td align="center" valign="top">if username is set</td>
  </tr>  
  <tr>
    <td valign="top">maxtime</td>
    <td valign="top">Maximum time in seconds a single download may take,
      otherwise it will be interrupted and treated like a download
      error.  <em>Since Ant 1.8.0</em></td>
    <td align="center" valign="top">No: default 0 which means no
      maximum time</td>
  </tr>  
  <tr>
    <td valign="top">retries</td>
    <td valign="top">the per download number of retries on error<br/>
      <em>since Ant 1.8.0</em></td>
    <td align="center" valign="top">No; default "3"</td>
  </tr>
  <tr>
    <td valign="top">skipexisting</td>
    <td valign="top">skip files that already exist on the local filesystem<br/>
      <em>since Ant 1.8.0</em></td>
    <td align="center" valign="top">No; default "false"</td>
  </tr>
   <tr>
    <td valign="top">httpusecaches</td>
    <td valign="top">HTTP only - if true, allow caching at the
      HttpUrlConnection level.  if false, turn caching off.<br/>
      <b>Note</b> this is only a hint to the underlying UrlConnection
      class, implementations and proxies are free to ignore the
      setting.</td>
    <td align="center" valign="top">No; default "true"</td>
  </tr>
  <tr>
    <td valign="top">useragent</td>
    <td valign="top">User-Agent HTTP header to send, starting with Ant
      1.9.3 Ant will specify a User-Agent header of "Apache Ant VERSION"
      unless overridden by this attribute<br/>
      <em>since Ant 1.9.3</em></td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">tryGzipEncoding</td>
    <td valign="top">When set to true Ant will tell the server it is
      willing to accept gzip encoding to reduce the amount of data to
      transfer and uncompress the content transparently.<br/>
      Setting this to true also means Ant will uncompress
      <code>.tar.gz</code> and similar files automatically.<br/>
      <em>since Ant 1.9.5</em></td>
    <td align="center" valign="top">No; default "false"</td>
</table>
<h3>Parameters specified as nested elements</h3>
<h4>any resource collection</h4>

<p><a href="../Types/resources.html#collection">Resource
    Collection</a>s are used to select groups of URLs to download.  If
    the collection contains more than one resource, the dest attribute
    must point to a directory if it exists or a directory will be
    created if it doesn't exist.  The destination file name use the
    last part of the path of the source URL unless you also specify a
    mapper.</p>

<h4>mapper</h4>

<p>You can define name transformations by using a
  nested <a href="../Types/mapper.html">mapper</a> element.  You
  can also use any filenamemapper type in place of the mapper
  element.</p>

<p>The mapper will receive the resource's name as argument.  Any
  resource for which the mapper returns no or more than one mapped
  name will be skipped.  If the returned name is a relative path, it
  will be considered relative to the <em>dest</em> attribute.</p>

<h3>Examples</h3>
<pre>  &lt;get src=&quot;http://ant.apache.org/&quot; dest=&quot;help/index.html&quot;/&gt;</pre>
<p>Gets the index page of http://ant.apache.org/, and stores it in the file <code>help/index.html</code>.</p>

<pre>  &lt;get src=&quot;http://www.apache.org/dist/ant/KEYS&quot; 
    dest=&quot;KEYS&quot; 
    verbose=&quot;true&quot;
    usetimestamp=&quot;true&quot;/&gt;</pre>
<p>
Gets the PGP keys of Ant's (current and past) release managers, if the local copy
is missing or out of date. Uses the verbose option 
for progress information.
</p>

<pre>  &lt;get src=&quot;https://insecure-bank.org/statement/user=1214&quot; 
    dest=&quot;statement.html&quot; 
    username="1214";
    password="secret"/&gt;</pre>
<p>
Fetches some file from a server with access control. Because https is being used the
fact that basic auth sends passwords in plaintext is moot if you
ignore the fact that it is part of your build file which may be
readable by third parties.  If you need more security, consider using
the <a href="input.html">input task</a> to query for a password.</p>

<p>Using a macro like the following</p>

<pre>
  &lt;macrodef name="get-and-checksum">
    &lt;attribute name="url"/>
    &lt;attribute name="dest"/>
    &lt;sequential&gt;
      &lt;local name="destdir"/&gt;
      &lt;dirname property="destdir" file="@{dest}"/&gt;
      &lt;get dest="${destdir}"&gt;
        &lt;url url="@{url}"/&gt;
        &lt;url url="@{url}.sha1"/&gt;
        &lt;firstmatchmapper&gt;
          &lt;globmapper from="@{url}.sha1" to="@{dest}.sha"/&gt;
          &lt;globmapper from="@{url}" to="@{dest}"/&gt;
        &lt;/firstmatchmapper&gt;
      &lt;/get&gt;
      &lt;local name="checksum.matches"/>
      &lt;local name="checksum.matches.fail"/>
      &lt;checksum file="@{dest}" algorithm="sha" fileext=".sha"
                verifyproperty="checksum.matches"/>
      &lt;condition property="checksum.matches.fail">
        &lt;equals arg1="${checksum.matches}" arg2="false"/>
      &lt;/condition>
      &lt;fail if="checksum.matches.fail">Checksum error&lt;/fail>
    &lt;/sequential>
  &lt;/macrodef>
</pre>

<p>it is possible to download an artifacts together with its SHA1
  checksum (assuming a certain naming convention for the checksum
  file, of course) and validate the checksum on the fly.</p>

<pre>
&lt;get dest=&quot;downloads&quot;&gt;
  &lt;url url=&quot;http://ant.apache.org/index.html&quot;/&gt; 
  &lt;url url=&quot;http://ant.apache.org/faq.html&quot;/&gt;
&lt;/get&gt;
</pre>
<p>Gets the index and FAQ pages of http://ant.apache.org/, and stores
  them in the directory <code>downloads</code> which will be created if
  necessary.</p>
</body>
</html>

