HttpRequestUtils.java 11.4 KB
package cn.com.polysoft.utils;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.slf4j.LoggerFactory;

public class HttpRequestUtils {
	  private static final org.slf4j.Logger logger = LoggerFactory.getLogger(HttpRequestUtils.class);
	  private static int connectTimeOut = 5000;
	  private static int readTimeOut = 10000;
	  public static String requestEncoding = "UTF-8";
	  
	  public static String doGetZl(String reqUrl){
		  return doGet(reqUrl, requestEncoding);
	  }	
	  
	  public static String doGetZl(String reqUrl, Map parameters){
	      return doGet(reqUrl, parameters, requestEncoding);
	  }
	  
	  public static String doPostZl(String reqUrl, Map parameters){
		  return doPost(reqUrl, parameters, requestEncoding);
	  }
	  
	  public static String doPost(String reqUrl, Map parameters, String recvEncoding){
	    HttpURLConnection url_con = null;
	    String responseContent = null;
	    try
	    {
	      String params = getMapParamsToStr(parameters, requestEncoding);
	      URL url = new URL(reqUrl);
	      url_con = (HttpURLConnection)url.openConnection();
	      url_con.setRequestMethod("POST");
	      System.setProperty("sun.net.client.defaultConnectTimeout", 
	        String.valueOf(connectTimeOut));
	      System.setProperty("sun.net.client.defaultReadTimeout", 
	        String.valueOf(readTimeOut));
	      
	      url_con.setDoOutput(true);
	      byte[] b = params.toString().getBytes();
	      url_con.getOutputStream().write(b, 0, b.length);
	      url_con.getOutputStream().flush();
	      url_con.getOutputStream().close();
	      
	      InputStream in = url_con.getInputStream();
	      BufferedReader rd = new BufferedReader(new InputStreamReader(in, 
	        recvEncoding));
	      String tempLine = rd.readLine();
	      StringBuffer tempStr = new StringBuffer();
	      String crlf = System.getProperty("line.separator");
	      while (tempLine != null)
	      {
	        tempStr.append(tempLine);
	        tempStr.append(crlf);
	        tempLine = rd.readLine();
	      }
	      responseContent = tempStr.toString();
	      rd.close();
	      in.close();
	    }
	    catch (IOException e)
	    {
	      logger.error("网络故障", e);
	    }
	    finally
	    {
	      if (url_con != null) {
	        url_con.disconnect();
	      }
	    }
	    return responseContent;
	  }
	  
	  public static String getMapParamsToStr(Map paramMap, String requestEncoding)
			    throws IOException
			  {
			    StringBuffer params = new StringBuffer();
			    if (paramMap == null) {
			      paramMap = new HashMap();
			    }
			    Iterator iter = paramMap.entrySet().iterator();
			    while (iter.hasNext())
			    {
			      Map.Entry element = (Map.Entry)iter.next();
			      params.append(element.getKey().toString());
			      params.append("=");
			      params.append(URLEncoder.encode(element.getValue().toString(), 
			        requestEncoding));
			      params.append("&");
			    }
			    if (params.length() > 0) {
			      params = params.deleteCharAt(params.length() - 1);
			    }
			    return params.toString();
			  }
	  
	  public static String doGet(String reqUrl, String recvEncoding)
	  {
	    HttpURLConnection url_con = null;
	    String responseContent = null;
	    try
	    {
	      StringBuffer params = new StringBuffer();
	      String queryUrl = reqUrl;
	      int paramIndex = reqUrl.indexOf("?");
	      if (paramIndex > 0)
	      {
	        queryUrl = reqUrl.substring(0, paramIndex);
	        String parameters = reqUrl.substring(paramIndex + 1, 
	          reqUrl.length());
	        String[] paramArray = parameters.split("&");
	        for (int i = 0; i < paramArray.length; i++)
	        {
	          String string = paramArray[i];
	          int index = string.indexOf("=");
	          if (index > 0)
	          {
	            String parameter = string.substring(0, index);
	            String value = string.substring(index + 1, 
	              string.length());
	            params.append(parameter);
	            params.append("=");
	            params.append(URLEncoder.encode(value, 
	              requestEncoding));
	            params.append("&");
	          }
	        }
	        params = params.deleteCharAt(params.length() - 1);
	      }
	      URL url = new URL(queryUrl);
	      url_con = (HttpURLConnection)url.openConnection();
	      url_con.setRequestMethod("GET");
	      System.setProperty("sun.net.client.defaultConnectTimeout", 
	        String.valueOf(connectTimeOut));
	      System.setProperty("sun.net.client.defaultReadTimeout", 
	        String.valueOf(readTimeOut));
	      
	      url_con.setDoOutput(true);
	      byte[] b = params.toString().getBytes();
	      url_con.getOutputStream().write(b, 0, b.length);
	      url_con.getOutputStream().flush();
	      url_con.getOutputStream().close();
	      InputStream in = url_con.getInputStream();
	      BufferedReader rd = new BufferedReader(new InputStreamReader(in, 
	        recvEncoding));
	      String tempLine = rd.readLine();
	      StringBuffer temp = new StringBuffer();
	      String crlf = System.getProperty("line.separator");
	      while (tempLine != null)
	      {
	        temp.append(tempLine);
	        temp.append(crlf);
	        tempLine = rd.readLine();
	      }
	      responseContent = temp.toString();
	      rd.close();
	      in.close();
	    }
	    catch (IOException e)
	    {
	      logger.error("网络故障", e);
	    }
	    finally
	    {
	      if (url_con != null) {
	        url_con.disconnect();
	      }
	    }
	    return responseContent;
	  }
	  
	  public static String doGet(String reqUrl, Map parameters, String recvEncoding)
	  {
	    HttpURLConnection url_con = null;
	    String responseContent = null;
	    try
	    {
	      url_con = doHttpGetConnection(reqUrl, parameters);
	      
	      InputStream in = url_con.getInputStream();
	      BufferedReader rd = new BufferedReader(new InputStreamReader(in, 
	        recvEncoding));
	      String tempLine = rd.readLine();
	      StringBuffer temp = new StringBuffer();
	      String crlf = System.getProperty("line.separator");
	      while (tempLine != null)
	      {
	        temp.append(tempLine);
	        temp.append(crlf);
	        tempLine = rd.readLine();
	      }
	      responseContent = temp.toString();
	      rd.close();
	      in.close();
	    }
	    catch (IOException e)
	    {
	      logger.error("网络故障", e);
	    }
	    finally
	    {
	      if (url_con != null) {
	        url_con.disconnect();
	      }
	    }
	    return responseContent;
	  }
	  
	  private static HttpURLConnection doHttpGetConnection(String reqUrl, Map parameters)
	    throws IOException
	  {
	    HttpURLConnection url_con = null;
	    String params = getMapParamsToStr(parameters, requestEncoding);
	    
	    URL url = new URL(reqUrl);
	    url_con = (HttpURLConnection)url.openConnection();
	    url_con.setRequestMethod("GET");
	    System.setProperty("sun.net.client.defaultConnectTimeout", 
	      String.valueOf(connectTimeOut));
	    System.setProperty("sun.net.client.defaultReadTimeout", 
	      String.valueOf(readTimeOut));
	    
	    url_con.setDoOutput(true);
	    byte[] b = params.toString().getBytes();
	    url_con.getOutputStream().write(b, 0, b.length);
	    url_con.getOutputStream().flush();
	    url_con.getOutputStream().close();
	    
	    return url_con;
	  }
	  
	  /**
	   * GET请求
	   * @param url
	   * @return
	   */
	  public static String doGetRequest(String url){
			String result="";
			try{
				InputStream is= null;
				DataInputStream indata= null;
				HttpURLConnection conn=null;
				try {
					conn = (HttpURLConnection) (new URL(url)).openConnection(); 
					conn.setRequestMethod("GET");
					conn.setRequestProperty("Content-Length", String.valueOf("".getBytes().length));
					conn.setRequestProperty("Content-Type","text/json");
					conn.setUseCaches(false);
					
					is = conn.getInputStream();
					indata = new DataInputStream(is);
					String varSub="";
					while((varSub=indata.readLine())!=null){
						result+=varSub;
					}
					//result =  new String(result.getBytes("ISO-8859-1"), "utf-8");
				} catch (Exception e) {
					e.printStackTrace();
				}finally{
					try {
						//每次打开流后,都需要关闭,然后赋值NULL,等GC回收
						if(null !=indata){
							indata.close();
							indata=null;
						}
						if(null !=is){
							is.close();
							is=null;
						}
						if(null !=conn){
							conn.disconnect();
							conn=null;
						}
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return result;
		} 
		
		/**
		 * POST请求
		 * sendPost("http://localhost:6144/Home/RequestPostString", "key=123&v=456");
		 * @return
		 */
		
		public static String doPostRequest(String url,String param){
			String result="";
			try{
				InputStream is= null;
				DataInputStream indata= null;
				HttpURLConnection conn=null;
				try {
					conn = (HttpURLConnection) (new URL(url)).openConnection(); 
					
					conn.setDoOutput(true);// 使用 URL 连接进行输出   
					conn.setDoInput(true);// 使用 URL 连接进行输入   
					conn.setUseCaches(false);// 忽略缓存   
								
					conn.setRequestMethod("POST");
					//conn.setRequestProperty("Content-Type", "application/octet-stream");   
					conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
					conn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
					conn.setRequestProperty("Charset", "UTF-8");
					
		            conn.setRequestProperty("accept", "*/*");   
		            conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); 				
					
					byte[] requestStringBytes = param.getBytes("UTF-8"); 
					conn.setRequestProperty("Content-length", "" + requestStringBytes.length);
					
				    //建立输入流,向指向的URL传入参数
				    DataOutputStream dos=new DataOutputStream(conn.getOutputStream());
				    //dos.writeBytes(param);
				    dos.write(param.getBytes());
				    dos.flush();
				    dos.close();
					
				    int resultCode=conn.getResponseCode();
				    result = "";
					logger.info("http=======post==============resultCode> " + resultCode);
				    if(HttpURLConnection.HTTP_OK==resultCode){
				    	StringBuffer sb=new StringBuffer();
				    	String readLine=new String();
				    	BufferedReader responseReader=new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
				    	while((readLine=responseReader.readLine())!=null){
				    		sb.append(readLine).append("\n");
				    	}
				    	responseReader.close();
				    	//System.out.println(sb.toString());
				    	result = sb.toString();
				    } 
				} catch (Exception e) {
					e.printStackTrace();
				}finally{
					try {
						//每次打开流后,都需要关闭,然后赋值NULL,等GC回收
						if(null !=indata){
							indata.close();
							indata=null;
						}
						if(null !=is){
							is.close();
							is=null;
						}
						if(null !=conn){
							conn.disconnect();
							conn=null;
						}
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return result;
		} 
}