[HttpClient] 执行HTTP GET方法 (from Jakarta Commons Cookbook 11。3)

[HttpClient] 执行HTTP GET方法 (from Jakarta Commons Cookbook 11。3)

问题:
        你需要通过HTTP GET方法来获取信息。

解答:
        创建一个HttpClient实例,并调用以GetMethod对象为参数的executeMethod方法。然后,响应的内容就可以通过一个InputStream,byte[],或者是String来获得。下面的例子将获得 http://www.discursive.com /jccook/的内容,并且以一个String来获得响应。
       
 1  import  org.apache.commons.httpclient.HttpClient;
 2  import  org.apache.commons.httpclient.HttpException;
 3  import  org.apache.commons.httpclient.HttpMethod;
 4  import  org.apache.commons.httpclient.methods.GetMethod;
 5 
 6  HttpClient client  =   new  HttpClient( );
 7  String url  =   " http://www.discursive.com/jccook/ " ;
 8  HttpMethod method  =   new  GetMethod( url );
 9 
10  try  {
11      client.executeMethod( method );
12 
13       if ( method.getStatusCode( )  ==  HttpStatus.SC_OK ) {
14          String response  =  method.getResponseBodyAsString( );
15          System.out.println( response );
16      }
17  catch ( HttpException he ) {
18      System.out.println(  " HTTP Problem:  "   +  he.getMessage( ) );
19  catch ( IOException ioe ) {
20      System.out.println(  " IO Exeception:  "   +  ioe.getMessage( ) );
21  finally  {
22      method.releaseConnection( );
23      method.recycle( );
24  }
     这段代码用HTTP GET方法获得了 http://www.discursive.com/jccook/的内容。如果响应的状态码是HttpStatus.SC_OK(即200),下列响应将被输出到控制台:
< html >
 
< head >
  
< title > JCCook Example </ title >
 
</ head >
 
< body >
  
< h1 > Hello World !</ h1 >
 
</ body >
</ html >


讨论:
        注意这段代码中对异常的处理。执行一个简单的HTTP GET需要捕捉两个异常:HttpException和IOException。如果是发生HTTP协议错误时,将抛出HttpException异常;如果是发生有关网络的错误时,将抛出IOException异常。这一章后面的例子将会忽略对异常的处理。你应该要知道每一次调用executeMethod()都要用适当的try/catch块包裹。
        GetMethod类是HttpMethod接口的一种实现。HttpMethod会被HttpClient所调用。HttpMethod实现类的生命周期是很简单的:一个HttpMethod实例被创建,然后被HttpClient调用;一旦响应被检测到以后,HttpMethod释放连接并被回收使用。当HttpMethod调用了recycle()方法,相当于发送了一个信号给系统表示这个HttpMethod实例可以再被使用。releaseConnection()方法指示HttpClient释放掉与这个HttpMethod相关联的连接。无论在使用HttpMethod实例的过程中发生了什么,都要调用releaseConnection()来释放网络资源。
        一旦HttpClient的executeMethod方法被调用,你可以通过HttpMethod的getStatusCode()方法来获得响应的状态码。这个方法返回一个int,对应于HttpStatus类的public static final 变量。HttpStatus类还包括下面一些常量:SC_OK(200),SC_NOT_FOUND(404),SC_INTERNAL_SERVER_ERROR(500),SC_MOVED_TEMPORARILY (302),SC_UNAUTHORIZED(401)等等。请参照HttpStatus的Javadoc来获得所有的HTTP状态列表。当服务器返回一个错误的HTTP状态是,通常还会返回一小段信息。这一小段信息可以通过HttpMethod类的getStatusText()方法获得。
 
参考:
       可以从RFC2616(http://www.zvon.org/tmRFC/RFC2616/Output/index.html)获得HTTP GET方法的官方定义;
       要获得HTTP 状态码的完整列表,请参见 HttpStatus Javadoc  (http://jakarta.apache.org/commons/ httpclient/apidocs/index.html)。

你可能感兴趣的:([HttpClient] 执行HTTP GET方法 (from Jakarta Commons Cookbook 11。3))