HttpComponents也就是以前的httpclient项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端/服务器编程工具包,并且它支持 HTTP 协议最新的版本和建议。

以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。

  • 实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
  • 支持自动转向
  • 支持 HTTPS 协议
  • 支持代理服务器等
  • 支持Cookie
/*
 * HTTP POST请求
 */
public boolean HttpPost(String url, Map<String,String> post, Map<String,String> head){
  boolean httpRES = true;
        
  /*
   * 发送请求
   */
   try {
       // 1. 设置 url 对象
    this.httpUtil = new HttpPost(url);

    // 2. 加入 post参数
    List <NameValuePair> params = new ArrayList <NameValuePair>();
    for (Map.Entry<String, String> line : post.entrySet()) {
      params.add( new BasicNameValuePair( line.getKey(), line.getValue() ) );
    }
    this.httpUtil.setEntity((HttpEntity) new UrlEncodedFormEntity(params, Consts.UTF_8));
            
    // 3. 加入 head参数
    for (Map.Entry<String, String> line : head.entrySet()) {
      this.httpUtil.setHeader( line.getKey(), line.getValue() ); 
    }
            
    // 4. 发送请求
    this.httpResponse = this.httpClient.execute(this.httpUtil);
            
    // 5. 获取状态 设置状态
    this.http.setServerStatusCode(this.httpResponse.getStatusLine().getStatusCode());
    if( 200 != this.http.getServerStatusCode() ){
      //访问失败 返回失败信息
      httpRES = false;
    }
    this.entity = this.httpResponse.getEntity();
            
    // 6. 获取内容 设置内容
    InputStream in = this.entity.getContent(); 
    this.readResponse(in);
            
    // 7. 获取header 设置header
    Header[] headers = this.httpResponse.getAllHeaders();   
    for(Header h : headers){  
      System.out.println(h.getName() + " : " + h.getValue());     }     
// 从输入流读取网页字符串内容 // System.out.println(this.entity.getContentType()); // System.out.println(this.entity.getContentEncoding()); // System.out.println(this.entity.getContentLength());     // 8. 关闭 url 对象     EntityUtils.consume(this.entity);   } catch (Exception e) {     LogFile.Error("Exception: " + e.toString());     e.printStackTrace();     httpRES = false;     return httpRES;   } finally {     // 9. 关闭 url 对象     this.httpClient.getConnectionManager().shutdown();   }   return httpRES; } /* * 读取http返回内容 ,并打印 */ private void readResponse(InputStream in) throws Exception{   BufferedReader reader = new BufferedReader(new InputStreamReader(in));   String line = null;   while ((line = reader.readLine()) != null) {
    System.out.println(line);   } }