| <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> |
| |
| |
| |
| |
| |
| |