1. package ln;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.io.PrintWriter;  
  7. import java.util.HashMap;  
  8. import java.util.List;  
  9. import java.util.Map;  
  10.   
  11. /** 
  12.  * 用于模拟HTTP请求中GET/POST方式  
  13.  * @author landa 
  14.  * 
  15.  */  
  16. public class HttpUtils {    
  17.     /**  
  18.      * 发送GET请求  
  19.      *   
  20.      * @param url  
  21.      *            目的地址  
  22.      * @param parameters  
  23.      *            请求参数,Map类型。  
  24.      * @return 远程响应结果  
  25.      */    
  26.     public static String sendGet(String url, Map<String, String> parameters) {   
  27.         String result="";  
  28.         BufferedReader in = null;// 读取响应输入流    
  29.         StringBuffer sb = new StringBuffer();// 存储参数    
  30.         String params = "";// 编码之后的参数  
  31.         try {  
  32.             // 编码请求参数    
  33.             if(parameters.size()==1){  
  34.                 for(String name:parameters.keySet()){  
  35.                     sb.append(name).append("=").append(  
  36.                             java.net.URLEncoder.encode(parameters.get(name),    
  37.                             "UTF-8"));  
  38.                 }  
  39.                 params=sb.toString();  
  40.             }else{  
  41.                 for (String name : parameters.keySet()) {    
  42.                     sb.append(name).append("=").append(    
  43.                             java.net.URLEncoder.encode(parameters.get(name),    
  44.                                     "UTF-8")).append("&");    
  45.                 }    
  46.                 String temp_params = sb.toString();    
  47.                 params = temp_params.substring(0, temp_params.length() - 1);    
  48.             }  
  49.             String full_url = url + "?" + params;   
  50.             System.out.println(full_url);   
  51.             // 创建URL对象    
  52.             java.net.URL connURL = new java.net.URL(full_url);    
  53.             // 打开URL连接    
  54.             java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL    
  55.                     .openConnection();    
  56.             // 设置通用属性    
  57.             httpConn.setRequestProperty("Accept", "*/*");    
  58.             httpConn.setRequestProperty("Connection", "Keep-Alive");    
  59.             httpConn.setRequestProperty("User-Agent",    
  60.                     "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");    
  61.             // 建立实际的连接    
  62.             httpConn.connect();    
  63.             // 响应头部获取    
  64.             Map<String, List<String>> headers = httpConn.getHeaderFields();    
  65.             // 遍历所有的响应头字段    
  66.             for (String key : headers.keySet()) {    
  67.                 System.out.println(key + "\t:\t" + headers.get(key));    
  68.             }    
  69.             // 定义BufferedReader输入流来读取URL的响应,并设置编码方式    
  70.             in = new BufferedReader(new InputStreamReader(httpConn    
  71.                     .getInputStream(), "UTF-8"));    
  72.             String line;    
  73.             // 读取返回的内容    
  74.             while ((line = in.readLine()) != null) {    
  75.                 result += line;    
  76.             }    
  77.         } catch (Exception e) {  
  78.             e.printStackTrace();  
  79.         }finally{  
  80.             try {    
  81.                 if (in != null) {    
  82.                     in.close();    
  83.                 }    
  84.             } catch (IOException ex) {    
  85.                 ex.printStackTrace();    
  86.             }    
  87.         }  
  88.         return result ;  
  89.     }    
  90.     
  91.     /**   
  92.      * 发送POST请求   
  93.      *    
  94.      * @param url   
  95.      *            目的地址   
  96.      * @param parameters   
  97.      *            请求参数,Map类型。   
  98.      * @return 远程响应结果   
  99.      */    
  100.     public static String sendPost(String url, Map<String, String> parameters) {    
  101.         String result = "";// 返回的结果    
  102.         BufferedReader in = null;// 读取响应输入流    
  103.         PrintWriter out = null;    
  104.         StringBuffer sb = new StringBuffer();// 处理请求参数    
  105.         String params = "";// 编码之后的参数    
  106.         try {    
  107.             // 编码请求参数    
  108.             if (parameters.size() == 1) {    
  109.                 for (String name : parameters.keySet()) {    
  110.                     sb.append(name).append("=").append(    
  111.                             java.net.URLEncoder.encode(parameters.get(name),    
  112.                                     "UTF-8"));    
  113.                 }    
  114.                 params = sb.toString();    
  115.             } else {    
  116.                 for (String name : parameters.keySet()) {    
  117.                     sb.append(name).append("=").append(    
  118.                             java.net.URLEncoder.encode(parameters.get(name),    
  119.                                     "UTF-8")).append("&");    
  120.                 }    
  121.                 String temp_params = sb.toString();    
  122.                 params = temp_params.substring(0, temp_params.length() - 1);    
  123.             }    
  124.             // 创建URL对象    
  125.             java.net.URL connURL = new java.net.URL(url);    
  126.             // 打开URL连接    
  127.             java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL    
  128.                     .openConnection();    
  129.             // 设置通用属性    
  130.             httpConn.setRequestProperty("Accept", "*/*");    
  131.             httpConn.setRequestProperty("Connection", "Keep-Alive");    
  132.             httpConn.setRequestProperty("User-Agent",    
  133.                     "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");    
  134.             // 设置POST方式    
  135.             httpConn.setDoInput(true);    
  136.             httpConn.setDoOutput(true);    
  137.             // 获取HttpURLConnection对象对应的输出流    
  138.             out = new PrintWriter(httpConn.getOutputStream());    
  139.             // 发送请求参数    
  140.             out.write(params);    
  141.             // flush输出流的缓冲    
  142.             out.flush();    
  143.             // 定义BufferedReader输入流来读取URL的响应,设置编码方式    
  144.             in = new BufferedReader(new InputStreamReader(httpConn    
  145.                     .getInputStream(), "UTF-8"));    
  146.             String line;    
  147.             // 读取返回的内容    
  148.             while ((line = in.readLine()) != null) {    
  149.                 result += line;    
  150.             }    
  151.         } catch (Exception e) {    
  152.             e.printStackTrace();    
  153.         } finally {    
  154.             try {    
  155.                 if (out != null) {    
  156.                     out.close();    
  157.                 }    
  158.                 if (in != null) {    
  159.                     in.close();    
  160.                 }    
  161.             } catch (IOException ex) {    
  162.                 ex.printStackTrace();    
  163.             }    
  164.         }    
  165.         return result;    
  166.     }    
  167.     
  168.     /**   
  169.      * 主函数,测试请求   
  170.      *    
  171.      * @param args   
  172.      */    
  173.     public static void main(String[] args) {    
  174.         Map<String, String> parameters = new HashMap<String, String>();    
  175.         parameters.put("name", "sarin");    
  176.         String result =sendGet("http://www.baidu.com", parameters);  
  177.         System.out.println(result);   
  178.     }    
  179. }  
posted on 2018-06-21 16:05  维也纳的忧伤  阅读(4491)  评论(0编辑  收藏  举报