### Classes and interfaces supporting the client side of the HTTP protocol.

The HttpClient component supports the client-side of RFC 1945 (HTTP/1.0) and RFC 2616 (HTTP/1.1), several related specifications (RFC 2109 (Cookies), RFC 2617 (HTTP Authentication), etc.), and provides a framework by which new request types (methods) or HTTP extensions can can be easily created or supported.

The basis for the abstraction is provided by three types:

{@link org.apache.commons.httpclient.HttpConnection}
  represents a network connection to some HTTP host.
{@link org.apache.commons.httpclient.HttpMethod}
  represents a request to be made over some {@link org.apache.commons.httpclient.HttpConnection} and contains the server's response.
{@link org.apache.commons.httpclient.HttpState}
  contains the HTTP attributes that may persist from request to request, such as cookies and authentication credentials.

and several simple bean-style classes:

{@link org.apache.commons.httpclient.Cookie}
  represents HTTP cookie.
{@link org.apache.commons.httpclient.Credentials}
  an interface representing a set of authentication credentials.
{@link org.apache.commons.httpclient.Header}
  represents an HTTP request or response header.
{@link org.apache.commons.httpclient.HeaderElement}
  represents a single element of a multi-part header.
{@link org.apache.commons.httpclient.UsernamePasswordCredentials}
  a username and password pair.

{@link org.apache.commons.httpclient.HttpClient} provides a simple "user-agent" implementation that will suffice for many applications, but whose use is not required.

HttpClient also provides several utilities that may be useful when extending the framework:

{@link org.apache.commons.httpclient.HttpMethodBase}
  an abstract base implementation of `HttpMethod`, which may be extended to create new method types or to support additional protocol HTTP features.
{@link org.apache.commons.httpclient.HttpStatus}
  an enumeration of HttpStatus codes.
{@link org.apache.commons.httpclient.ChunkedOutputStream}
  an {@link java.io.OutputStream} wrapper supporting the "chunked" transfer encoding.
{@link org.apache.commons.httpclient.ChunkedInputStream}
  an {@link java.io.InputStream} wrapper supporting the "chunked" transfer encoding.
{@link org.apache.commons.httpclient.util.URIUtil}
  provides utilities for encoding and decoding URI's in the `%HH` format.

#### HttpClient Configuration with Java Properties

Java properties can be set at run time with the `-Dname=value`command line arguments to the application that uses HttpClient. These properties can also be set programaticly by calling `System.getProperties().setProperty(name, value)`. This is the list of properties that HttpClient recognizes:

Name | Type | Effect
--- | --- | ---
httpclient.useragent | String | Sets the User-Agent string to be sent on every HTTP request.
httpclient.authentication.preemptive | boolean | Sends authorization credentials without requiring explicit requests from the web server

``