HttpUtils工具类

package com.soft.util;

import java.io.BufferedReader;  
import java.io.ByteArrayOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;  
import java.net.HttpURLConnection;  
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.http.HttpException;
import org.apache.http.HttpStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * http工具类
 * @author ik.com
 */
public class HttpUtils {

    private static Logger logger = LoggerFactory.getLogger(HttpUtils.class);

	 private static final int TIMEOUT_IN_MILLIONS = 50000;  
     
     public interface CallBack  
     {  
         void onRequestComplete(String result);  
     }  
   
   
     /** 
      * 异步的Get请求 
      *  
      * @param urlStr 
      * @param callBack 
      */  
     public static void doGetAsyn(final String urlStr, final CallBack callBack)  
     {  
         new Thread()  
         {  
             public void run()  
             {  
                 try  
                 {  
                     String result = doGet(urlStr);  
                     if (callBack != null)  
                     {  
                         callBack.onRequestComplete(result);  
                     }  
                 } catch (Exception e)  
                 {  
//                     e.printStackTrace();
                     logger.error(e.getMessage());

                 }  
   
             };  
         }.start();  
     }  
   
     /** 
      * 异步的Post请求 
      * @param urlStr 
      * @param params 
      * @param callBack 
      * @throws Exception 
      */  
     public static void doPostAsyn(final String urlStr, final String params,  
             final CallBack callBack) throws Exception  
     {  
         new Thread()  
         {  
             public void run()  
             {  
                 try  
                 {  
                     String result = doPost(urlStr, params);  
                     if (callBack != null)  
                     {  
                         callBack.onRequestComplete(result);  
                     }  
                 } catch (Exception e)  
                 {  
//                     e.printStackTrace();
                     logger.error(e.getMessage());

                 }

   
             };  
         }.start();  
   
     }  
   
     /** 
      * Get请求,获得返回数据 
      *  
      * @param urlStr 
      * @return 
      * @throws Exception 
      */  
     public static String doGet(String urlStr)   
     {  
         URL url = null;  
         HttpURLConnection conn = null;  
         InputStream is = null;  
         ByteArrayOutputStream baos = null;  
         try  
         {  
             url = new URL(urlStr);  
             conn = (HttpURLConnection) url.openConnection();  
             conn.setReadTimeout(TIMEOUT_IN_MILLIONS);  
             conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);  
             conn.setRequestMethod("GET");  
             conn.setRequestProperty("accept", "*/*");  
             conn.setRequestProperty("connection", "Keep-Alive");  
             conn.setRequestProperty("Content-Type",  
                     "application/x-www-form-urlencoded");  
             conn.setRequestProperty("charset", "utf-8");  
             if (conn.getResponseCode() == 200)  
             {  
                 is = conn.getInputStream();  
                 baos = new ByteArrayOutputStream();  
                 int len = -1;  
                 byte[] buf = new byte[128];  
   
                 while ((len = is.read(buf)) != -1)  
                 {  
                     baos.write(buf, 0, len);  
                 }  
                 baos.flush(); 
                 String content = new String(baos.toByteArray(),"utf-8");
                 return content;  
             } else  
             {  
                 throw new RuntimeException(" responseCode is not 200 ... ");  
             }  
   
         } catch (Exception e)  
         {  
             //e.printStackTrace();
             logger.error(e.getMessage());

         } finally  
         {  
             try  
             {  
                 if (is != null)  
                     is.close();  
             } catch (IOException e)  
             {  
             }  
             try  
             {  
                 if (baos != null)  
                     baos.close();  
             } catch (IOException e)  
             {  
             }  
             conn.disconnect();  
         }  
           
         return null ;  
   
     }  
     
     public static String doGetAndHeader(String urlStr,Map<String, String> headParams)   
     {  
         URL url = null;  
         HttpURLConnection conn = null;  
         InputStream is = null;  
         ByteArrayOutputStream baos = null;  
         try  
         {  
             url = new URL(urlStr);  
             conn = (HttpURLConnection) url.openConnection();  
             conn.setReadTimeout(TIMEOUT_IN_MILLIONS);  
             conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);  
             conn.setRequestMethod("GET");  
             conn.setRequestProperty("accept", "*/*");  
             conn.setRequestProperty("connection", "Keep-Alive");  
             conn.setRequestProperty("Content-Type",  
                     "application/x-www-form-urlencoded");  
             conn.setRequestProperty("charset", "utf-8");  
             if(headParams!=null){  
                 for(String key : headParams.keySet()){  
                     conn.setRequestProperty(key, headParams.get(key));  
                 }  
             }  
             if (conn.getResponseCode() == 200)  
             {  
                 is = conn.getInputStream();  
                 baos = new ByteArrayOutputStream();  
                 int len = -1;  
                 byte[] buf = new byte[128];  
   
                 while ((len = is.read(buf)) != -1)  
                 {  
                     baos.write(buf, 0, len);  
                 }  
                 baos.flush(); 
                 String content = new String(baos.toByteArray(),"utf-8");
                 return content;  
             } else  
             {  
                 throw new RuntimeException(" responseCode is not 200 ... ");  
             }  
   
         } catch (Exception e)  
         {  
             e.printStackTrace();
             logger.error(e.getMessage());

         } finally  
         {  
             try  
             {  
                 if (is != null)  
                     is.close();  
             } catch (IOException e)  
             {  
             }  
             try  
             {  
                 if (baos != null)  
                     baos.close();  
             } catch (IOException e)  
             {  
             }  
             conn.disconnect();  
         }  
           
         return null ;  
   
     }  
   
   
     
     public static byte[] doGetByte(String urlStr)   
     {  
         URL url = null;  
         HttpURLConnection conn = null;  
         InputStream is = null;  
         ByteArrayOutputStream baos = null;  
         try  
         {  
             url = new URL(urlStr);  
             conn = (HttpURLConnection) url.openConnection();  
             conn.setReadTimeout(TIMEOUT_IN_MILLIONS);  
             conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);  
             conn.setRequestMethod("GET");  
             conn.setRequestProperty("accept", "*/*");  
             conn.setRequestProperty("connection", "Keep-Alive");  
             conn.setRequestProperty("Content-Type",  
                     "application/x-www-form-urlencoded");  
             conn.setRequestProperty("charset", "utf-8");  
             if (conn.getResponseCode() == 200)  
             {  
                 is = conn.getInputStream();  
                 baos = new ByteArrayOutputStream();  
                 int len = -1;  
                 byte[] buf = new byte[128];  
   
                 while ((len = is.read(buf)) != -1)  
                 {  
                     baos.write(buf, 0, len);  
                 }  
                 baos.flush(); 
                 return buf;  
             } else  
             {  
                 throw new RuntimeException(" responseCode is not 200 ... ");  
             }  
   
         } catch (Exception e)  
         {  
//             e.printStackTrace();
             logger.error(e.getMessage());
         } finally  
         {  
             try  
             {  
                 if (is != null)  
                     is.close();  
             } catch (IOException e)  
             {  
             }  
             try  
             {  
                 if (baos != null)  
                     baos.close();  
             } catch (IOException e)  
             {  
             }  
             conn.disconnect();  
         }  
           
         return null ;  
   
     }  
     
     
     /**  
      * 向指定 URL 发送POST方法的请求  
      *   
      * @param url  
      *            发送请求的 URL  
      * @param param  
      *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。  
      * @return 所代表远程资源的响应结果  
      * @throws Exception  
      */  
     public static String doPost(String url, String param)   
     {  
         PrintWriter out = null;  
         BufferedReader in = null;  
         String result = "";  
         try  
         {  
             URL realUrl = new URL(url);  
             // 打开和URL之间的连接  
             HttpURLConnection conn = (HttpURLConnection) realUrl  
                     .openConnection();  
             // 设置通用的请求属性  
             conn.setRequestProperty("accept", "*/*");  
             conn.setRequestProperty("connection", "Keep-Alive");  
             conn.setRequestMethod("POST");  
             conn.setRequestProperty("Content-Type",  
                     "application/json");  
             conn.setRequestProperty("charset", "utf-8");  
             conn.setUseCaches(false);  
             // 发送POST请求必须设置如下两行  
             conn.setDoOutput(true);  
             conn.setDoInput(true);  
             conn.setReadTimeout(TIMEOUT_IN_MILLIONS);  
             conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);  
   
             if (param != null && !param.trim().equals(""))  
             {  
                 // 获取URLConnection对象对应的输出流  
                 out = new PrintWriter(conn.getOutputStream());  
                 OutputStreamWriter out1 = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
                 // 发送请求参数  
//                 out.print(param);  
                 out1.write(param);
                 // flush输出流的缓冲  
//                 out.flush();  
                 out1.flush();
             }  
             // 定义BufferedReader输入流来读取URL的响应  
             in = new BufferedReader(  
                     new InputStreamReader(conn.getInputStream()));  
             String line = in.readLine();  
             if(line != null){  
                 result += line;  
             }  
         } catch (Exception e)  
         {  
             e.printStackTrace();
             logger.error(e.getMessage());
         }
         // 使用finally块来关闭输出流、输入流  
         finally  
         {  
             try  
             {  
                 if (out != null)  
                 {  
                     out.close();  
                 }  
                 if (in != null)  
                 {  
                     in.close();  
                 }  
             } catch (IOException ex)  
             {  
                 ex.printStackTrace();  
             }  
         }  
         return result;  
     }  

 	public static String post(String url,Map<String,String> map){
		HttpClient client = null;
		PostMethod post = null;
		String result = "";
		int status = 200;
		try {
	       client = new HttpClient();                
	       post = new PostMethod(url);         
	       post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
           String key = "";
           String value = "";
           NameValuePair[] params = getNameValuePair(map);
           post.setRequestBody(params); 
           status = client.executeMethod(post); 
           if(status == 200){
           	  result = post.getResponseBodyAsString();
           }
	    } catch (Exception ex) {
	    	ex.printStackTrace();
	    }
	    finally{
	      post.releaseConnection(); 
	    }
	    return result;
	}
	
	public static NameValuePair[] getNameValuePair(Map<String,String> map){
		List<NameValuePair> list = new ArrayList<NameValuePair>();
		NameValuePair param = null;
		for(String key:map.keySet()){
			param  = new NameValuePair();
			param.setName(key);
			param.setValue(map.get(key));
			list.add(param);
		}
		NameValuePair[] params = new NameValuePair[list.size()];
		return list.toArray(params);
	}
	private static MultiThreadedHttpConnectionManager connectionManager = null;  
	private static int connectionTimeOut = 25000;  
	private static int socketTimeOut = 25000;  
	private static int maxConnectionPerHost = 20;  
	private static int maxTotalConnections = 20;
	private static HttpClient client; 
    static{  
        connectionManager = new MultiThreadedHttpConnectionManager();  
        connectionManager.getParams().setConnectionTimeout(connectionTimeOut);  
        connectionManager.getParams().setSoTimeout(socketTimeOut);  
        connectionManager.getParams().setDefaultMaxConnectionsPerHost(maxConnectionPerHost);  
        connectionManager.getParams().setMaxTotalConnections(maxTotalConnections);  
        client = new HttpClient(connectionManager);  
    } 
	/** 
     * POST方式提交数据 
     * @param url 待请求的URL 
     * @param params 要提交的参数 
     * @param enc   编码 
     * @return   响应结果 
     * @throws IOException  IO异常 
     */  
    public static String URLPost(String url, Map<String, String> params, String enc) throws HttpException{  
        String response = "";          
        PostMethod postMethod = null;  
        try {  
            postMethod = new PostMethod(url);  
            postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=" + enc);  
            //将表单的值放入postMethod中  
            Set<String> keySet = params.keySet();  
            for(String key : keySet){  
                String value = params.get(key);  
                postMethod.addParameter(key, value);  
            }             
            //执行postMethod  
            int statusCode = client.executeMethod(postMethod);  
            if(statusCode == HttpStatus.SC_OK) {  
                response = postMethod.getResponseBodyAsString();  
            }else{  
            	logger.error("响应状态码 = " + postMethod.getStatusCode());  
            }  
        }catch(IOException e){  
        	logger.error("发生网络异常", e);  
            e.printStackTrace();  
        }finally{  
            if(postMethod != null){  
                postMethod.releaseConnection();  
                postMethod = null;  
            }  
        }  
        return response;  
    }
     
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值