代码改变世界

Java模拟http请求调用远程接口工具类

2017-04-01 17:02  taozsay  阅读(1046)  评论(0编辑  收藏  举报
  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 }