java發送http請求(提交form表單)


http://hbiao68.iteye.com/blog/1973914

寫一個servlet用於測試請求

Java代碼   收藏代碼
  1. import java.io.IOException;  
  2. import java.io.PrintWriter;  
  3.   
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. public class Abc extends HttpServlet {  
  10.   
  11.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  12.         System.out.println("doGet");  
  13.         this.doPost(request, response);  
  14.     }  
  15.   
  16.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  17.         System.out.println("doPost");  
  18.         System.out.println("aaa : "+request.getParameter("aaa"));  
  19.         System.out.println("param1 : "+request.getParameter("param1"));  
  20.           
  21.         System.out.println(request.getHeader("avc"));  
  22.           
  23.         PrintWriter pw = response.getWriter();  
  24.         pw.write(request.getParameter("param1"));  
  25.         pw.flush();  
  26.         pw.close();  
  27.     }  
  28.   
  29. }  

 

web.xml配置文件

Xml代碼   收藏代碼
  1. <servlet>  
  2.    <description></description>  
  3.    <display-name>Abc</display-name>  
  4.    <servlet-name>Abc</servlet-name>  
  5.    <servlet-class>com.Abc</servlet-class>  
  6.  </servlet>  
  7.  <servlet-mapping>  
  8.    <servlet-name>Abc</servlet-name>  
  9.    <url-pattern>/Abc</url-pattern>  
  10.  </servlet-mapping>  

 

抽象出一個工具請求類

Java代碼   收藏代碼
  1. package http;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.InputStreamReader;  
  5. import java.io.OutputStreamWriter;  
  6. import java.net.HttpURLConnection;  
  7. import java.net.URL;  
  8. import java.util.Map;  
  9. import java.util.Map.Entry;  
  10.   
  11. public class HttpUtil {  
  12.   
  13.     public static String http(String url, Map<String, String> params) {  
  14.         URL u = null;  
  15.         HttpURLConnection con = null;  
  16.         // 構建請求參數  
  17.         StringBuffer sb = new StringBuffer();  
  18.         if (params != null) {  
  19.             for (Entry<String, String> e : params.entrySet()) {  
  20.                 sb.append(e.getKey());  
  21.                 sb.append("=");  
  22.                 sb.append(e.getValue());  
  23.                 sb.append("&");  
  24.             }  
  25.             sb.substring(0, sb.length() - 1);  
  26.         }  
  27.         System.out.println("send_url:" + url);  
  28.         System.out.println("send_data:" + sb.toString());  
  29.         // 嘗試發送請求  
  30.         try {  
  31.             u = new URL(url);  
  32.             con = (HttpURLConnection) u.openConnection();  
  33.             //// POST 只能為大寫,嚴格限制,post會不識別  
  34.             con.setRequestMethod("POST");  
  35.             con.setDoOutput(true);  
  36.             con.setDoInput(true);  
  37.             con.setUseCaches(false);  
  38.             con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
  39.             OutputStreamWriter osw = new OutputStreamWriter(con.getOutputStream(), "UTF-8");  
  40.             osw.write(sb.toString());  
  41.             osw.flush();  
  42.             osw.close();  
  43.         } catch (Exception e) {  
  44.             e.printStackTrace();  
  45.         } finally {  
  46.             if (con != null) {  
  47.                 con.disconnect();  
  48.             }  
  49.         }  
  50.   
  51.         // 讀取返回內容  
  52.         StringBuffer buffer = new StringBuffer();  
  53.         try {  
  54.             //一定要有返回值,否則無法把請求發送給server端。  
  55.             BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));  
  56.             String temp;  
  57.             while ((temp = br.readLine()) != null) {  
  58.                 buffer.append(temp);  
  59.                 buffer.append("\n");  
  60.             }  
  61.         } catch (Exception e) {  
  62.             e.printStackTrace();  
  63.         }  
  64.   
  65.         return buffer.toString();  
  66.     }  
  67.   
  68. }  

 備注:一定要獲取返回值,否則請求無法到達。

readLine()為阻塞方法,會等待服務器的響應,否則會一直等待

con.setDoOutput(true); 這個表示是要發送請求到URL地址,沒有這句話server是不會響應的。

參數的傳遞方式類似於在URL后面添加"?key=value&key1=value1"這種方式

 

 

測試類

Java代碼   收藏代碼
  1. @Test  
  2.     public void test3() {  
  3.         Map parames = new HashMap<String, String>();  
  4.         parames.put("param1", "param1_value");  
  5.         parames.put("param2", "param2_value");  
  6.         parames.put("param3", "param3_value");  
  7.         // 如果地址欄中有aaa這個參數,則默認選擇地址欄的,如果沒有則選擇添加的參數  
  8.         parames.put("aaa", "aaa_value");  
  9.         HttpUtil.http("http://localhost:8080/a/Abc?aaa=dddd", parames);  
  10.     } 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM