httpClient实例(一)

2014-11-24 09:26:31 · 作者: · 浏览: 0
Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS的通讯方式,告诉它你想使用HTTPS方式,剩下的事情交给httpclient替你完成。本文会针对我们在编写HTTP客户端程序时经常碰到的几个问题进行分别介绍如何使用httpclient来解决它们,为了让读者更快的熟悉这个项目我们最开始先给出一个简单的例子来读取一个网页的内容,然后循序渐进解决掉前进中的所有问题。
  1. 读取网页(HTTP/HTTPS)内容
  下面是我们给出的一个简单的例子用来访问某个页面
  /*
  * Created on 2003-12-14 by Liudong
  */
  package http.demo;
  import java.io.IOException;
  import org.apache.commons.httpclient.*;
  import org.apache.commons.httpclient.methods.*;
  /**
  * 最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面
  * @author Liudong
  */
  public class SimpleClient {
   public static void main(String[] args) throws IOException
   {
   HttpClient client = new HttpClient();
   //设置代理服务器地址和端口
   //client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);
   //使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
   HttpMethod method = new GetMethod("http://java.sun.com");
   //使用POST方法
   //HttpMethod method = new PostMethod("http://java.sun.com");
   client.executeMethod(method);
   //打印服务器返回的状态
   System.out.println(method.getStatusLine());
   //打印返回的信息
   System.out.println(method.getResponseBodyAsString());
   //释放连接
   method.releaseConnection();
   }
  }
  在这个例子中首先创建一个HTTP客户端(HttpClient)的实例,然后选择提交的方法是GET或者POST,最后在HttpClient实例上执行提交的方法,最后从所选择的提交方法中读取服务器反馈回来的结果。这就是使用HttpClient的基本流程。其实用一行代码也就可以搞定整个请求的过程,非常的简单!
  2. 以GET或者POST方式向网页提交参数
  其实前面一个最简单的示例中我们已经介绍了如何使用GET或者POST方式来请求一个页面,本小节与之不同的是多了提交时设定页面所需的参数,我们知道如果是GET的请求方式,那么所有参数都直接放到页面的URL后面用问号与页面地址隔开,每个参数用&隔开,例如:http://java.sun.com name=liudong&mobile=123456,但是当使用POST方法时就会稍微有一点点麻烦。本小节的例子演示向如何查询手机号码所在的城市,代码如下:
  /*
  * Created on 2003-12-7 by Liudong
  */
  package http.demo;
  import java.io.IOException;
  import org.apache.commons.httpclient.*;
  import org.apache.commons.httpclient.methods.*;
  /**
  * 提交参数演示
  * 该程序连接到一个用于查询手机号码所属地的页面
  * 以便查询号码段1330227所在的省份以及城市
  * @author Liudong
  */
  public class SimpleHttpClient {
   public static void main(String[] args) throws IOException
   {
   HttpClient client = new HttpClient();
   client.getHostConfiguration().setHost("www.imobile.com.cn", 80, "http");
   HttpMethod method = getPostMethod();//使用POST方式提交数据
   client.executeMethod(method);
   //打印服务器返回的状态
   System.out.println(method.getStatusLine());
   //打印结果页面
   String response =
   new String(method.getResponseBodyAsString().getBytes("8859_1"));
   //打印返回的信息
   System.out.println(response);
   method.releaseConnection();
   }
   /**
   * 使用GET方式提交数据
   * @return
   */
   private static HttpMethod getGetMethod(){
   return new GetMethod("/simcard.php simcard=1330227");
   }
   /**
   * 使用POST方式提交数据
   * @return
   */
   private static HttpMethod getPostMethod(){
   PostMethod post = new PostMethod("/simcard.php");
   Nameva luePair simcard = new Nameva luePair("simcard","1330227");
   post.setRequestBody(new Nameva luePair[] { simcard});
   return post;
   }
  }
  在上面的例子中页面http://www.imobile.com.cn/simcard.php需要一个参数是simcard,这个参数值为手机号码段,即手机号码的前七位,服务器会返回提交的手机号码对应的省份、城市以及其他详细信息。GET的提交方法只需要在URL后加入参数信息,而POST则需要通过Nameva luePair类来设置参数名称和它所对应的值
  3. 处理页面重定向
  在JSP/Servlet编程中response.sendRedirect方法就是使用HTTP协议中的重定向机制。它与JSP中的的区别在于后