Java模擬HTTP的Get和Post請求

http://xieke90.iteye.com/blog/2259953
一、使用URLConnection實現GET和POST請求

 

    實現代碼:

Java代碼  收藏代碼
  1. package test.util;  
  2.   
  3. import java.io.BufferedOutputStream;  
  4. import java.io.BufferedReader;  
  5. import java.io.IOException;  
  6. import java.io.InputStreamReader;  
  7. import java.io.PrintWriter;  
  8. import java.net.HttpURLConnection;  
  9. import java.net.URL;  
  10. import java.net.URLConnection;  
  11. import java.util.Map;  
  12. import java.util.Map.Entry;  
  13.   
  14. /** 
  15.  *  
  16.  * @author junhu 
  17.  * 
  18.  */  
  19. public class HttpUtil  
  20. {  
  21.     /** 
  22.      * 使用URLConnection實現GET請求 
  23.      *  
  24.      * 1.實例化一個java.net.URL對象; 2.通過URL對象的openConnection()方法得到一個java.net.URLConnection; 
  25.      * 3.通過URLConnection對象的getInputStream()方法獲得輸入流; 4.讀取輸入流; 5.關閉資源; 
  26.      */  
  27.     public static void get(String urlStr) throws Exception  
  28.     {  
  29.   
  30.         URL url = new URL(urlStr);  
  31.         URLConnection urlConnection = url.openConnection(); // 打開連接  
  32.   
  33.         System.out.println(urlConnection.getURL().toString());  
  34.   
  35.         BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8")); // 獲取輸入流  
  36.         String line = null;  
  37.         StringBuilder sb = new StringBuilder();  
  38.         while ((line = br.readLine()) != null)  
  39.         {  
  40.             sb.append(line + "\n");  
  41.         }  
  42.         br.close();  
  43.         System.out.println(sb.toString());  
  44.     }  
  45.   
  46.     /** 
  47.      * 使用HttpURLConnection實現POST請求 
  48.      *  
  49.      * 1.實例化一個java.net.URL對象; 2.通過URL對象的openConnection()方法得到一個java.net.URLConnection; 
  50.      * 3.通過URLConnection對象的getOutputStream()方法獲得輸出流; 4.向輸出流中寫數據; 5.關閉資源; 
  51.      */  
  52.     public static void post(String urlStr, Map<String, String> parameterMap) throws IOException  
  53.     {  
  54.   
  55.         URL url = new URL(urlStr);  
  56.         HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();  
  57.   
  58.         httpURLConnection.setDoInput(true);  
  59.         httpURLConnection.setDoOutput(true); // 設置該連接是可以輸出的  
  60.         httpURLConnection.setRequestMethod("POST"); // 設置請求方式  
  61.         httpURLConnection.setRequestProperty("charset""utf-8");  
  62.   
  63.         System.out.println(httpURLConnection.getURL().toString());  
  64.   
  65.         PrintWriter pw = new PrintWriter(new BufferedOutputStream(httpURLConnection.getOutputStream()));  
  66.           
  67.         StringBuffer parameter = new StringBuffer();  
  68.         parameter.append("1=1");  
  69.         for (Entry<String, String> entry : parameterMap.entrySet())  
  70.         {  
  71.             parameter.append("&" + entry.getKey() + "=" + entry.getValue());  
  72.         }  
  73.         pw.write(parameter.toString());// 向連接中寫數據(相當於發送數據給服務器)  
  74.           
  75.         pw.flush();  
  76.         pw.close();  
  77.   
  78.         System.out.println("parameter: " + parameter.toString());  
  79.   
  80.         BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), "utf-8"));  
  81.         String line = null;  
  82.         StringBuilder sb = new StringBuilder();  
  83.         while ((line = br.readLine()) != null)  
  84.         { // 讀取數據  
  85.             sb.append(line + "\n");  
  86.         }  
  87.         br.close();  
  88.         System.out.println(sb.toString());  
  89.     }  
  90. }  

    測試代碼:

Java代碼  收藏代碼
  1. package test.http;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.apache.http.NameValuePair;  
  7. import org.apache.http.message.BasicNameValuePair;  
  8.   
  9. import test.util.HttpClientUtil;  
  10.   
  11. /** 
  12.  * http通信測試 
  13.  *  
  14.  * @author junhu 
  15.  */  
  16. public class TestHttp  
  17. {  
  18.     public static void main(String[] args)  
  19.     {  
  20.         try  
  21.         {  
  22.             // --------------測試請求/test/index begin---------------------------  
  23.             // HttpUtil.get("http://localhost:8080/Java_http/test/index?name=zhangsan&age=22&sex=nan");  
  24.   
  25.             // Map<String, String> parameterMap = new HashMap<String, String>();  
  26.             // parameterMap.put("name", "zhangsan");  
  27.             // parameterMap.put("age", "22");  
  28.             // parameterMap.put("sex", "nan");  
  29.             // HttpUtil.post("http://localhost:8080/Java_http/test/index", parameterMap);  
  30.             // --------------測試請求/test/index end---------------------------  
  31.   
  32.             // --------------測試請求/test/index2 begin---------------------------  
  33.             // HttpUtil.get("http://localhost:8080/Java_http/test/index2?userName=zhangsan&userAge=22&userSex=nan");  
  34.   
  35.             // Map<String, String> parameterMap = new HashMap<String, String>();  
  36.             // parameterMap.put("userName", "zhangsan");  
  37.             // parameterMap.put("userAge", "22");  
  38.             // parameterMap.put("userSex", "nan");  
  39.             // HttpUtil.post("http://localhost:8080/Java_http/test/index2", parameterMap);  
  40.             // --------------測試請求/test/index2 end---------------------------  
  41.         }  
  42.         catch (Exception e)  
  43.         {  
  44.             e.printStackTrace();  
  45.         }  
  46.     }  
  47. }  
 二、使用 HttpClient實現GET和POST請求

 

    實現代碼:

Java代碼  收藏代碼
  1. package test.util;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.apache.http.HttpEntity;  
  6. import org.apache.http.HttpResponse;  
  7. import org.apache.http.NameValuePair;  
  8. import org.apache.http.client.HttpClient;  
  9. import org.apache.http.client.entity.UrlEncodedFormEntity;  
  10. import org.apache.http.client.methods.HttpGet;  
  11. import org.apache.http.client.methods.HttpPost;  
  12. import org.apache.http.impl.client.HttpClients;  
  13. import org.apache.http.util.EntityUtils;  
  14.   
  15. /** 
  16.  *  
  17.  * @author junhu 
  18.  * 
  19.  */  
  20. public class HttpClientUtil  
  21. {  
  22.     /** 
  23.      * 使用httpclient進行http通信 
  24.      *  
  25.      * Get請求 
  26.      */  
  27.     public static void httpclientGet(String urlStr) throws Exception  
  28.     {  
  29.   
  30.         System.out.println(urlStr);  
  31.   
  32.         // 創建HttpClient對象  
  33.         HttpClient client = HttpClients.createDefault();  
  34.   
  35.         // 創建GET請求(在構造器中傳入URL字符串即可)  
  36.         HttpGet get = new HttpGet(urlStr);  
  37.   
  38.         // 調用HttpClient對象的execute方法獲得響應  
  39.         HttpResponse response = client.execute(get);  
  40.   
  41.         // 調用HttpResponse對象的getEntity方法得到響應實體  
  42.         HttpEntity httpEntity = response.getEntity();  
  43.   
  44.         // 使用EntityUtils工具類得到響應的字符串表示  
  45.         String result = EntityUtils.toString(httpEntity, "utf-8");  
  46.         System.out.println(result);  
  47.     }  
  48.   
  49.     /** 
  50.      * 使用httpclient進行http通信 
  51.      *  
  52.      * Post請求 
  53.      */  
  54.     public static void httpclientPost(String urlStr, List<NameValuePair> parameters) throws Exception  
  55.     {  
  56.   
  57.         System.out.println(urlStr);  
  58.   
  59.         // 創建HttpClient對象  
  60.         HttpClient client = HttpClients.createDefault();  
  61.   
  62.         // 創建POST請求  
  63.         HttpPost post = new HttpPost(urlStr);  
  64.   
  65.         // 創建一個List容器,用於存放基本鍵值對(基本鍵值對即:參數名-參數值)--> parameters  
  66.   
  67.         // 向POST請求中添加消息實體  
  68.         post.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));  
  69.   
  70.         // 得到響應並轉化成字符串  
  71.         HttpResponse response = client.execute(post);  
  72.         HttpEntity httpEntity = response.getEntity();  
  73.         String result = EntityUtils.toString(httpEntity, "utf-8");  
  74.         System.out.println(result);  
  75.     }  
  76. }  

    測試代碼:

Java代碼  收藏代碼
  1. package test.http;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.apache.http.NameValuePair;  
  7. import org.apache.http.message.BasicNameValuePair;  
  8.   
  9. import test.util.HttpClientUtil;  
  10.   
  11. /** 
  12.  * http通信測試 
  13.  *  
  14.  * @author junhu 
  15.  */  
  16. public class TestHttp  
  17. {  
  18.     public static void main(String[] args)  
  19.     {  
  20.         try  
  21.         {  
  22.             // --------------測試請求/test/index begin---------------------------  
  23.             // HttpClientUtil  
  24.             // .httpclientGet("http://localhost:8080/Java_http/test/index?name=zhangsan&age=22&sex=nan");  
  25.   
  26.             // List<NameValuePair> parameters = new ArrayList<NameValuePair>();  
  27.             // parameters.add(new BasicNameValuePair("name", "zhangsan"));  
  28.             // parameters.add(new BasicNameValuePair("age", "22"));  
  29.             // parameters.add(new BasicNameValuePair("sex", "nan"));  
  30.             // HttpClientUtil.httpclientPost("http://localhost:8080/Java_http/test/index", parameters);  
  31.             // --------------測試請求/test/index end---------------------------  
  32.   
  33.             // --------------測試請求/test/index2 begin---------------------------  
  34.             // HttpClientUtil  
  35.             // .httpclientGet("http://localhost:8080/Java_http/test/index2?userName=zhangsan&userAge=22&userSex=nan");  
  36.   
  37.             List<NameValuePair> parameters = new ArrayList<NameValuePair>();  
  38.             parameters.add(new BasicNameValuePair("userName""zhangsan"));  
  39.             parameters.add(new BasicNameValuePair("userAge""22"));  
  40.             parameters.add(new BasicNameValuePair("userSex""nan"));  
  41.             HttpClientUtil.httpclientPost("http://localhost:8080/Java_http/test/index2", parameters);  
  42.             // --------------測試請求/test/index2 end---------------------------  
  43.         }  
  44.         catch (Exception e)  
  45.         {  
  46.             e.printStackTrace();  
  47.         }  
  48.     }  
  49. }  
 三、模擬POST請求發送JSON參數

 

    實現測試代碼:

Java代碼  收藏代碼
  1. package test.http;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.http.HttpEntity;  
  6. import org.apache.http.client.methods.CloseableHttpResponse;  
  7. import org.apache.http.client.methods.HttpPost;  
  8. import org.apache.http.entity.StringEntity;  
  9. import org.apache.http.impl.client.CloseableHttpClient;  
  10. import org.apache.http.impl.client.HttpClients;  
  11. import org.apache.http.util.EntityUtils;  
  12.   
  13. public class TestHttpWithJSON  
  14. {  
  15.   
  16.     public static void httpPostWithJSON(String url, String json)  
  17.     {  
  18.         // 創建默認的httpClient實例  
  19.         CloseableHttpClient httpclient = HttpClients.createDefault();  
  20.         try  
  21.         {  
  22.             // 創建httppost  
  23.             HttpPost httppost = new HttpPost(url);  
  24.             httppost.addHeader("Content-type""application/json; charset=utf-8");  
  25.             System.out.println("executing request " + httppost.getURI());  
  26.   
  27.             // 向POST請求中添加消息實體  
  28.             StringEntity se = new StringEntity(json, "UTF-8");  
  29.             httppost.setEntity(se);  
  30.             System.out.println("request parameters " + json);  
  31.   
  32.             // 執行post請求  
  33.             CloseableHttpResponse response = httpclient.execute(httppost);  
  34.             try  
  35.             {  
  36.                 // 獲取響應實體  
  37.                 HttpEntity entity = response.getEntity();  
  38.                 // 打印響應狀態  
  39.                 System.out.println(response.getStatusLine());  
  40.                 if (entity != null)  
  41.                 {  
  42.                     // 打印響應內容  
  43.                     System.out.println("--------------------------------------");  
  44.                     System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8"));  
  45.                     System.out.println("--------------------------------------");  
  46.                 }  
  47.             }  
  48.             finally  
  49.             {  
  50.                 response.close();  
  51.             }  
  52.         }  
  53.         catch (Exception e)  
  54.         {  
  55.             System.out.println("executing httpPostWithJSON error: " + e.getMessage());  
  56.         }  
  57.         finally  
  58.         {  
  59.             // 關閉連接,釋放資源  
  60.             try  
  61.             {  
  62.                 httpclient.close();  
  63.             }  
  64.             catch (IOException e)  
  65.             {  
  66.                 System.out.println("executing httpPostWithJSON error: " + e.getMessage());  
  67.             }  
  68.         }  
  69.     }  
  70.   
  71.     public static void main(String[] args)  
  72.     {  
  73.         // JsonObject jsonObject = new JsonObject();  
  74.         // jsonObject.addProperty("userName", "張三");  
  75.         // jsonObject.addProperty("userAge", "22");  
  76.         // jsonObject.addProperty("userSex", "男");  
  77.         // String url = "http://localhost:8080/Java_http/test/index3";  
  78.         // httpPostWithJSON(url, jsonObject.toString());  
  79.   
  80.         String url = "http://localhost:8080/Java_http/test/index3";  
  81.         String json = "{\"userName\":\"張三\",\"userAge\":\"22\",\"userSex\":\"男\"}";  
  82.         httpPostWithJSON(url, json);  
  83.     }  
  84. }  
 四、以下是公共的處理請求的代碼(控制器)
Java代碼  收藏代碼
  1. package test.controller;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.springframework.stereotype.Controller;  
  7. import org.springframework.ui.Model;  
  8. import org.springframework.web.bind.annotation.ModelAttribute;  
  9. import org.springframework.web.bind.annotation.RequestBody;  
  10. import org.springframework.web.bind.annotation.RequestMapping;  
  11. import org.springframework.web.bind.annotation.RequestMethod;  
  12. import org.springframework.web.bind.annotation.ResponseBody;  
  13.   
  14. import test.bean.User;  
  15.   
  16. /** 
  17.  * @author junhu 
  18.  */  
  19. @Controller  
  20. @RequestMapping("/test")  
  21. public class TestController {  
  22.   
  23.     @RequestMapping(value = "/index", method = RequestMethod.GET)  
  24.     public String testGet(HttpServletRequest request, HttpServletResponse response)  
  25.     {  
  26.         System.out.println(request.getParameter("name"));  
  27.         System.out.println(request.getParameter("age"));  
  28.         System.out.println(request.getParameter("sex"));  
  29.         return "success";  
  30.     }  
  31.   
  32.     @RequestMapping(value = "/index", method = RequestMethod.POST)  
  33.     public String testPost(HttpServletRequest request, HttpServletResponse response)  
  34.     {  
  35.         System.out.println(request.getParameter("name"));  
  36.         System.out.println(request.getParameter("age"));  
  37.         System.out.println(request.getParameter("sex"));  
  38.         return "success";  
  39.     }  
  40.   
  41.     @RequestMapping(value = "/index2", method = RequestMethod.GET)  
  42.     public String testGetByObject(@ModelAttribute("user") User user, Model model)  
  43.     {  
  44.         System.out.println(user.getUserName());  
  45.         System.out.println(user.getUserAge());  
  46.         System.out.println(user.getUserSex());  
  47.         return "success";  
  48.     }  
  49.   
  50.     @RequestMapping(value = "/index2", method = RequestMethod.POST)  
  51.     public String testPostByObject(@ModelAttribute("user") User user, Model model)  
  52.     {  
  53.         System.out.println(user.getUserName());  
  54.         System.out.println(user.getUserAge());  
  55.         System.out.println(user.getUserSex());  
  56.         return "success";  
  57.     }  
  58.   
  59.     @RequestMapping(value = "/index3", method = RequestMethod.POST)  
  60.     public @ResponseBody User testPostByJson(@RequestBody User user, Model model)  
  61.     {  
  62.         System.out.println(user.getUserName());  
  63.         System.out.println(user.getUserAge());  
  64.         System.out.println(user.getUserSex());  
  65.         return user;  
  66.     }  
  67. }  
   

   轉載請註明出處:http://xieke90.iteye.com/blog/2259953

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章