guangnian0412's BLOG

Java in my life

常用链接

统计

积分与排名

我关注的Blog

最新评论

[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)。

posted on 2006-04-04 00:18 guangnian 阅读(3871) 评论(0)  编辑  收藏 所属分类: Jakarta Commons


只有注册用户登录后才能发表评论。


网站导航: