imho: Apache HTTP Client
usage example:
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpMethodParams;
import java.io.*;
public class HttpClientTutorial {
private static String url = "http://www.apache.org/";
public static void main(String[] args) {
// Create an instance of HttpClient.
HttpClient client = new HttpClient();
// Create a method instance.
GetMethod method = new GetMethod(url);
// Provide custom retry handler is necessary
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
// Execute the method.
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
// Read the response body.
byte[] responseBody = method.getResponseBody();
// Deal with the response.
// Use caution: ensure correct character encoding and is not binary data
System.out.println(new String(responseBody));
} catch (HttpException e) {
System.err.println("Fatal protocol violation: " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println("Fatal transport error: " + e.getMessage());
e.printStackTrace();
} finally {
// Release the connection.
method.releaseConnection();
}
}
}
some highlight features:
- Standards based, pure Java, implementation of HTTP versions 1.0
and 1.1- Full implementation of all HTTP methods (GET, POST, PUT, DELETE,
HEAD, OPTIONS, and TRACE) in an
extensible OO framework. - Supports encryption with HTTPS (HTTP over SSL) protocol.
- Granular non-standards configuration and tracking.
- Transparent connections through HTTP proxies.
- Tunneled HTTPS connections through HTTP proxies, via the CONNECT
method. - Transparent connections through SOCKS proxies (version 4 & 5) using
native Java socket support. - Authentication using Basic, Digest and the encrypting NTLM (NT
Lan Manager) methods. - Plug-in mechanism for custom authentication methods.
- Multi-Part form POST for uploading large files.
- Pluggable secure sockets implementations, making it easier to
use third party solutions - Connection management support for use in multi-threaded
applications. Supports setting the
maximum total connections as well as
the maximum connections per host.
Detects and closes stale connections. - Automatic Cookie handling for reading Set-Cookie: headers from the
server and sending them back out in a
Cookie: header when appropriate. - Plug-in mechanism for custom cookie policies.
- Request output streams to avoid buffering any content body by
streaming directly to the socket to
the server. - Response input streams to efficiently read the response body by
streaming directly from the socket to
the server. - Persistent connections using KeepAlive in HTTP/1.0 and persistance
in HTTP/1.1 - Direct access to the response code and headers sent by the server.
- The ability to set connection timeouts.
- HttpMethods implement the Command Pattern to allow for parallel
requests and efficient re-use of
connections. - Source code is freely available under the Apache Software License.
- Full implementation of all HTTP methods (GET, POST, PUT, DELETE,