11.3. Performing an HTTP GET

Problem

You need to retrieve information with the HTTP GET method.

Solution

Create an instance of HttpClient and use it to execute a GetMethod object. Once the method has been executed, the response body can be accessed as an InputStream, byte[], or String. The following example gets the contents of http://www.discursive.com/jccook/ and retrieves the response body as a string:

               import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.GetMethod;

HttpClient client = new HttpClient( );
String url = "http://www.discursive.com/jccook/";
HttpMethod method = new GetMethod( url );
    
try {
    client.executeMethod( method );

    if( method.getStatusCode( ) == HttpStatus.SC_OK ) {
        String response = method.getResponseBodyAsString( );
        System.out.println( response );
    }
} catch( HttpException he ) {
    System.out.println( "HTTP Problem: " + he.getMessage( ) );
} catch( IOException ioe ) {
    System.out.println( "IO Exeception: " + ioe.getMessage( ) );
} finally {
    method.releaseConnection( );
    method.recycle( );
}

This code retrieves the content of http://www.discursive.com/jccook using the HTTP GET method. If the response code is HttpStatus.SC_OK or 200, the response is printed to the console:

<html>
 <head>
  <title>JCCook Example</title>
 </head>
 <body>
  <h1>Hello World!</h1>
 </body>
</html>

Discussion

Note the exception handling involved in this example. Performing a simple HTTP GET called for two catch blocks: HttpException and IOException. An HttpException is thrown if there is a problem relating to the HTTP protocol, and an IOException is thrown if there is a problem with the network. Examples in this chapter omit the rigorous exception handling from the previous example; you can assume that every call to execute() is surrounded by the appropriate try/catch block.

GetMethod is an implementation of the HttpMethod interface, which is executed by HttpClient. The lifecycle of any HttpMethod implementation is straightforward; an HttpMethod is created, executed by an instance of HttpClient, and, once the response has been examined, the connection is released and the method is recycled. When an HttpMethod object is recycled by a call to recycle( ), it is a signal to the system that this specific HttpMethod instance can be used again. releaseConnection( ) instructs HttpClient to release the connection that is associated with an HttpMethod instance. No matter what happens during the execution of a method, the releaseConnection( ) must be called to free network resources.

Once a method has been executed, you can get the response status code from method.getStatusCode( ). This method returns an int, which will correspond to one of the public static final variables on HttpStatus. Some of the more common status codes on HttpStatus are SC_OK (200), SC_NOT_FOUND (404), SC_INTERNAL_SERVER_ERROR (500), SC_MOVED_TEMPORARILY (302), and SC_UNAUTHORIZED (401). For a full list of HTTP status codes, see the Javadoc for HttpStatus. When a server sends back a bad HTTP status, it is sometimes accompanied by a short message. This message can be read by calling method.getStatusText( ).

See Also

For a formal definition of the HTTP GET method, see Section 9.3 of RFC 2616 at http://www.zvon.org/tmRFC/RFC2616/Output/index.html.

For a full list of HTTP status codes, see the HttpStatus Javadoc at http://jakarta.apache.org/commons/httpclient/apidocs/index.html.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.149.27.72