|
|
@@ -0,0 +1,429 @@ |
|
|
|
<html> |
|
|
|
<head> |
|
|
|
<title>Http Tasks</title> |
|
|
|
</head> |
|
|
|
<body> |
|
|
|
<h2>Http Tasks</h2> |
|
|
|
|
|
|
|
Tasks do to make the basic HTTP requests: get, post, head, put, with authentication. |
|
|
|
There is also a task to configure the proxy settings of the http tasks. |
|
|
|
<p> |
|
|
|
These tasks significantly extend the basic <a |
|
|
|
href="../CoreTasks/get.html">get task</a>, but are split off into the optional section |
|
|
|
so that |
|
|
|
<ol> |
|
|
|
<li> The core ant file doesn't get so big |
|
|
|
<li> this implementation can move to using an optional jar (HttpClient) to work around |
|
|
|
limitations of the HTTP support built in to the Java platform. |
|
|
|
</ol> |
|
|
|
|
|
|
|
<h3>Core Functionality and Parameters</h3> |
|
|
|
|
|
|
|
<p>Common functionality to the core tasks tasks is </p> |
|
|
|
|
|
|
|
<ol> |
|
|
|
|
|
|
|
<li>Ability to name the remote url which the target of the request.</li> |
|
|
|
|
|
|
|
<li>Ability to name a local file as the local store of any returned |
|
|
|
content.</li> |
|
|
|
|
|
|
|
<li>Ability to name a property as the local store of any returned |
|
|
|
content.</li> |
|
|
|
|
|
|
|
<li>Ability to name a property to be set to "true" when a |
|
|
|
request succeeds.</li> |
|
|
|
|
|
|
|
<li>The option to list a number of parameters, each with a name and a |
|
|
|
value. Some methods (HttpGet, HttpHead) attach these parameters to the |
|
|
|
stated url to generate the url to actually fetch. Others (HttpPost) send |
|
|
|
the parameters up in the standard representation of form data.</li> |
|
|
|
|
|
|
|
<li>The option to state the authentication policy and then the username |
|
|
|
and password. Currently only basic authentication is used, which is |
|
|
|
utterly insecure except over an https link</li> |
|
|
|
|
|
|
|
<li>A 'verbose' option which provides extra information and progess |
|
|
|
information during a download.</li> |
|
|
|
|
|
|
|
<li>Timestamp control, using the <i>usetimestamp</i> flag. When set the |
|
|
|
timestamp of downloaded content is set to match that of the remote file |
|
|
|
(Java 1.2 or later only), and the local timestamp of the destination |
|
|
|
file (if it exists) used to set the if-modified-since header in the |
|
|
|
request, which will trigger optional download only. </li> |
|
|
|
|
|
|
|
</ol> |
|
|
|
|
|
|
|
<h3>Parameters</h3> |
|
|
|
|
|
|
|
<p> The <i>url</i> parameter specifies the URL to access. The optional |
|
|
|
<i>dest</i> parameter specifies a destination to which the retrieved |
|
|
|
page will be written. The optional <i>destinationproperty </i>parameter |
|
|
|
specifies a name of a property to save the content to, instead of a |
|
|
|
property. If neither <i>dest</i> nor <i>destinationproperty</i> |
|
|
|
specified, the contents of the specified URL are discarded (this is |
|
|
|
useful when accessing the URL for the purpose of causing some action on |
|
|
|
the remote server).</p> |
|
|
|
|
|
|
|
<p> When the <i>verbose</i> option is enabled, the task displays a '.' for every |
|
|
|
64 KB retrieved. If the <i>blocksize</i> parameter is adjusted then files are |
|
|
|
uploaded or downloaded in a different size block from this, and progress markers |
|
|
|
appear appropriately. </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, if the JVM is Java1.2 or later. NB: This timestamp facility |
|
|
|
only works on downloads using the HTTP protocol. |
|
|
|
|
|
|
|
<p>The <i>authtype</i>, <i>username</i>, and <i>password</i> options enable support |
|
|
|
for password protected pages. Currently only 'Basic' authentication is used, |
|
|
|
which is notoriously insecure except over an encrypted https channel.</p> |
|
|
|
<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">authtype</td> |
|
|
|
<td valign="top">the HTTP authentication protocol to use, <i>none</i> or <i>basic</i>.</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">blocksize</td> |
|
|
|
<td valign="top">size (in kilobytes) of the data block used for upload and |
|
|
|
download. Default: 64.<br> |
|
|
|
Keep this to a multiple of the hard disk sector size for file IO performance.</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top"><b>dest</b></td> |
|
|
|
<td valign="top">the file where to store the retrieved file.</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">destinationProperty</td> |
|
|
|
<td valign="top">the name of a property to fill with the returned content. |
|
|
|
Ignored if <i>dest</i> is set</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">failonerror</td> |
|
|
|
<td valign="top">stop the build if the request failed. default: true</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">password</td> |
|
|
|
<td valign="top">the password for authentication.</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">successProperty</td> |
|
|
|
<td valign="top">the name of a property to set to "true" if the |
|
|
|
request succeeds.<br> |
|
|
|
Set <i>failonerror</i> to false for this to be of use.</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top"><b>url</b></td> |
|
|
|
<td valign="top">the URL from which to retrieve a file.</td> |
|
|
|
<td align="center" valign="top">Yes</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">usecaches</td> |
|
|
|
<td valign="top">boolean to enable 'caching' of content during the fetch process. |
|
|
|
default:false</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">useresponsecode</td> |
|
|
|
<td valign="top">boolean to enable success/failure to be determined by result |
|
|
|
of the received response code. HTTP only. default=true.</td> |
|
|
|
<td align="center" valign="top"> </td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">username</td> |
|
|
|
<td valign="top">the user name for authentication.</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">usetimestamp</td> |
|
|
|
<td valign="top">boolean flag to conditionally download a file based on the |
|
|
|
timestamp of the local copy. HTTP only</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">verbose</td> |
|
|
|
<td valign="top"> boolean flag to control progress information display.</td> |
|
|
|
<td align="center" valign="top">No</td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
<p> The <i>successProperty</i> names a property which will be set to "true" if |
|
|
|
the request was deemed successful. For any non-http protocol, success is defined |
|
|
|
as the request completing. For http and https, success is defined as the request |
|
|
|
completing, and the response code from the serving being one of the 'success' |
|
|
|
values -any number between 200 and 299 inclusive. The usual HTTP_OK (200) is |
|
|
|
therefore a success, as is HTTP_ACCEPTED (202). But failures such as BAD_REQUEST |
|
|
|
(400) and the ubiquitous HTTP_NOT_FOUND (404) are most definately errors. So |
|
|
|
an attempt to access a missing url may result 'failure',even though some content |
|
|
|
was download (such as, perhaps, the 'file not found' text). If this is not what |
|
|
|
you desire, then set <i>useresponsecode</i>="false" for the system |
|
|
|
to interpret any data back as a success. |
|
|
|
<h3>Parameters specified as nested elements</h3> |
|
|
|
|
|
|
|
<p><b>param</b></p> |
|
|
|
|
|
|
|
<p>Specifies an HTTP request parameter to send as part of the request. |
|
|
|
For <i>get</i> and <i>head</i> request methods the parameters are |
|
|
|
encoded as part of the URL. For <i>post</i> request methods, the |
|
|
|
parameters are sent as the POST request data.</p> |
|
|
|
|
|
|
|
<table cellspacing="0" cellpadding="2" border="1"> |
|
|
|
<tbody> |
|
|
|
<tr> |
|
|
|
<td valign="top"><b>Attribute</b></td> |
|
|
|
<td valign="top"><b>Description</b></td> |
|
|
|
<td valign="top" align="middle"><b>Required</b></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">name</td> |
|
|
|
<td valign="top">the name of the request property to set.</td> |
|
|
|
<td valign="top" align="middle">Yes</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">value</td> |
|
|
|
<td valign="top">the value of the request property. You may alternatively |
|
|
|
specify the value as text between the beginning and ending param tags.</td> |
|
|
|
<td valign="center" align="middle">Yes</td> |
|
|
|
</tr> |
|
|
|
</tbody> |
|
|
|
</table> |
|
|
|
|
|
|
|
<p><b>header</b></p> |
|
|
|
|
|
|
|
<p>Specifies an arbitrary HTTP request header that will be sent with the |
|
|
|
request.</p> |
|
|
|
|
|
|
|
<table cellspacing="0" cellpadding="2" border="1"> |
|
|
|
<tr> |
|
|
|
<td valign="top"><b>Attribute</b></td> |
|
|
|
<td valign="top"><b>Description</b></td> |
|
|
|
<td valign="top" align="middle"><b>Required</b></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">name</td> |
|
|
|
<td valign="top">the name of the HTTP request header</td> |
|
|
|
<td valign="top" align="middle">Yes</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top">value</td> |
|
|
|
<td valign="top">the value of the HTTP request header. You may alternatively |
|
|
|
specify the value as text between the beginning and ending header tags.</td> |
|
|
|
<td valign="center" align="middle">Yes</td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
<h3>Quirky Limitations of java.net classes</h3> |
|
|
|
Multiple HTTP headers can with the same name can <b>not</b> be set, even |
|
|
|
though the protocol permits it. Java1.1 and Java 1.2 <i>may</i> permit multiple |
|
|
|
cookies to be set, but this behaviour is explicitly not supported on Java1.3, |
|
|
|
as someone went and change the code to stop this (Java bug ID #4242254). |
|
|
|
You need to set multiple cookies in one go and hope the far end can handle it |
|
|
|
<p> |
|
|
|
Bug ID #4160499 covers another issue, to wit: some versions of Java throw |
|
|
|
exceptions when an error code is greater than 400 and the dest file isn't |
|
|
|
one of a few simple file types, but Java 1.2 and 1.3 do not. So there |
|
|
|
is no way to get the error text when a jsp page throws some exception. |
|
|
|
<p> |
|
|
|
Also, although this isnt going to be filed until we have a short |
|
|
|
test case, but if you recieve a short response with less content than |
|
|
|
the content-length header promises, the library seems to silently |
|
|
|
reduce the content length header to match, which seems the wrong action. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h2><a name="httpget">HttpGet</a></h2> |
|
|
|
<h3>Description</h3> |
|
|
|
|
|
|
|
<p>Accesses a URL to retrieve a file or to cause some action on the server.</p> |
|
|
|
|
|
|
|
<p> This task should be preferred above the <a href="#cvs">CVS task</a> when doing |
|
|
|
automated builds. CVS is significantly slower than loading a compressed archive |
|
|
|
with http/ftp. This task will also retrieve content using other supported protocols, |
|
|
|
such as ftp: and file: |
|
|
|
<p>All the attributes of httptask may be used. Note that a quirk of the implementation |
|
|
|
of the http client in java makes it impossible to reliably fetch the response |
|
|
|
details from any unsuccessful request against a URL which doesn't end in '.htm,.html |
|
|
|
or .txt'. This means that if the task is used to compile jsp pages by issuing |
|
|
|
request against them, the text details of any errors will not be picked up. |
|
|
|
<h3>Examples</h3> |
|
|
|
|
|
|
|
<pre> <httpget url="http://jakarta.apache.org/" dest="help/index.html"/></pre> |
|
|
|
<p>Fetches the index page of http://jakarta.apache.org/, and stores it in the |
|
|
|
file <code>help/index.html</code>. </p> |
|
|
|
|
|
|
|
<pre> <httpget src="http://jakarta.apache.org/builds/tomcat/nightly/ant.zip" |
|
|
|
dest="optional.jar" |
|
|
|
verbose="true" |
|
|
|
usetimestamp="true" |
|
|
|
> |
|
|
|
<header name="Cookie" value="someid=43ff2b"/> |
|
|
|
</httpget></pre> |
|
|
|
<p> Retrieves the nightly ant build from the tomcat distribution, if the local |
|
|
|
copy is missing or out of date. Uses the verbose option for progress information. |
|
|
|
A cookie is supplied for the server's benefit.</p> |
|
|
|
<pre> <httpget url="https://www.pizzaservices.com/prices.jsp" |
|
|
|
dest="pizza-prices.xml"> |
|
|
|
<param name="zipcode">57340</param> |
|
|
|
<param name="pizza">pepperoni</param> |
|
|
|
</httpget></pre> |
|
|
|
<p>Builds a URL by adding parameters ("?zipcode=57340&pizza=pepperoni") |
|
|
|
to the base URL and then fetches the contents (fictional example)</p> |
|
|
|
<h2><a name="httphead">HttpHead</a> </h2> |
|
|
|
<p>The http HEAD request is similar to the normal GET request , except it, by |
|
|
|
definition, returns no content, just a success code and http headers. Accordingly, |
|
|
|
the destination properties of the base class -<i>dest</i> and -, <i>destinationpropertyname</i>) |
|
|
|
are not supported -any attempt to use them will result in a build failure. Note |
|
|
|
also that the http and https protocols are the only protocols supported. </p> |
|
|
|
<p> |
|
|
|
HttpHead is useful for triggering server side actions, but note that many servers |
|
|
|
interpret a HEAD very differently from a GET. An HttpGet request with the |
|
|
|
return data discarded is often a more reliable approach. |
|
|
|
</p> |
|
|
|
|
|
|
|
<p> Where head can be useful is in testing for the availability and reachability |
|
|
|
of servers, such as in the following test for apache being reachable, which |
|
|
|
sets a variable on success:- |
|
|
|
<pre> |
|
|
|
<httphead url="http://www.apache.org/" |
|
|
|
failonerror="false" |
|
|
|
successproperty="reachable.apache" |
|
|
|
/> |
|
|
|
</pre> |
|
|
|
|
|
|
|
<p>Note that sometimes a missing file on a mis-configured server still generates |
|
|
|
a successful '200' response to a GET request -and returns a 'missing' file page, |
|
|
|
but a HEAD request will reliably pick up the 'missing file' error. </p> |
|
|
|
<h2><a name="httppost">HttpPost</a></h2> |
|
|
|
|
|
|
|
<p>This implements the POST request. Supplied parameter data is turned into form |
|
|
|
data and sent as the body of the request, rather than appended to the URL. If |
|
|
|
a file to upload is specified instead, using <i>uploadFile</i>, the parameter |
|
|
|
values are ignored. Instead the content type of the file is sent in the header |
|
|
|
-based on the <i>contentType</i> attribute or what the java runtime thinks the |
|
|
|
content type is based on the file extension. The file is uploaded. </p> |
|
|
|
|
|
|
|
<p>Like HttpGet, this command can return a content which can downloaded to a file, |
|
|
|
to a property, or just ignored.</p> |
|
|
|
|
|
|
|
<p>This task adds two new attributes to the base set. </p> |
|
|
|
<table cellspacing="0" cellpadding="2" border="1"> |
|
|
|
<tr> |
|
|
|
<td valign="top" width="78"><b>Attribute</b></td> |
|
|
|
<td valign="top" width="559"><b>Description</b></td> |
|
|
|
<td valign="top" align="middle" width="62"><b>Required</b></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top" width="78">uploadFile</td> |
|
|
|
<td valign="top" width="559">a file to upload. when specified, all parameters |
|
|
|
are ignored.</td> |
|
|
|
<td valign="top" align="middle" width="62"> |
|
|
|
<div align="center">no</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top" width="78">contentType </td> |
|
|
|
<td valign="top" width="559">the type of the content (text/html, text/xml, |
|
|
|
application/binary, etc). Only of relevance when a file is being uploaded, |
|
|
|
and still optional in that case. </td> |
|
|
|
<td valign="center" align="middle" width="62"> |
|
|
|
<div align="center">no</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
<h3></h3> |
|
|
|
<pre> |
|
|
|
<httppost url="http://www.example.com/servlet/docserver" |
|
|
|
authtype="basic" username="joe" password="silly"> |
|
|
|
<param name="action" value="getdoc"/> |
|
|
|
<param name="ISBN">038550120X</param> |
|
|
|
<param name="pages">19-20</param> |
|
|
|
<header name="Accept-Language" value="en-us"/> |
|
|
|
</httppost></pre> |
|
|
|
<p>Accesses a server at www.foo.com, passing a request to some servlet asking it |
|
|
|
to retrieve several pages from a stored book. An HTTP header specifying |
|
|
|
acceptable languages for the returned contents is also sent. Basic |
|
|
|
authentication is used with a user name of "joe" and a password of |
|
|
|
"silly".</p> |
|
|
|
<p> |
|
|
|
<pre> <httppost url="https://www.pizzaservices.com" |
|
|
|
uploadFile="pizza-order.xml" |
|
|
|
contentType="text/xml"> |
|
|
|
</pre> |
|
|
|
<p>Sends a pre-prepared order for a pizza to a pizza vendor accepting orders using |
|
|
|
xml-rpc requests. (NB: fictional example) </p> |
|
|
|
<h2><a name="SetProxy"></a>SetProxy</h2> |
|
|
|
<p>This task configures the proxy settings for all http tasks which follow it |
|
|
|
in the build. That includes the original Get task, but not the telnet and FTP |
|
|
|
tasks. The proxy settings remain in place until changed or the build finishes, |
|
|
|
and will also hold for other ant build files invoked and even non-forked java |
|
|
|
invocations, and even URL resolutions of XML parsers running in the same JVM |
|
|
|
</p> |
|
|
|
<table cellspacing="0" cellpadding="2" border="1"> |
|
|
|
<tr> |
|
|
|
<td valign="top" width="78"><b>Attribute</b></td> |
|
|
|
<td valign="top" width="559"><b>Description</b></td> |
|
|
|
<td valign="top" align="middle" width="62"><b>Required</b></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top" width="78">proxyHost</td> |
|
|
|
<td valign="top" width="559">hostname of a web/ftp proxy server</td> |
|
|
|
<td valign="top" align="middle" width="62"> |
|
|
|
<div align="center">no</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top" width="78">proxyPort </td> |
|
|
|
<td valign="top" width="559">integer; the port of the proxy server</td> |
|
|
|
<td valign="center" align="middle" width="62"> |
|
|
|
<div align="center">no</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top" width="78">socksProxyHost</td> |
|
|
|
<td valign="top" width="559">hostname of a SOCKS4 proxy server</td> |
|
|
|
<td valign="center" align="middle" width="62"> |
|
|
|
<div align="center">no</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td valign="top" width="78">socksProxyPort</td> |
|
|
|
<td valign="top" width="559">integer; port number of a SOCKS4 server (default=1080)</td> |
|
|
|
<td valign="center" align="middle" width="62"> |
|
|
|
<div align="center">no</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
<h3></h3> |
|
|
|
<p>Turn off all proxies</p> |
|
|
|
<pre> <setproxy proxyhost="" socksProxyHost="" /></pre> |
|
|
|
<p>Set web proxy to 'web-proxy:80'; do not make any changes to existing socks |
|
|
|
settings (if any)</p> |
|
|
|
<pre> <setproxy proxyHost="web-proxy" proxyPort="80"/></pre> |
|
|
|
<p>Turn on socks</p> |
|
|
|
<pre> <setproxy socksProxyHost="socks-server" socksProxyPort="1080"/></pre> |
|
|
|
<p>Do nothing</p> |
|
|
|
<pre> <setproxy/></pre> |
|
|
|
<hr> |
|
|
|
<p align="center">Copyright © 2000,2001 Apache Software Foundation. All rights |
|
|
|
Reserved.</p> |
|
|
|
|
|
|
|
</body> |
|
|
|
</html> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|