java发送http请求(提交form表单)

Posted Bob_C

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.     } 

以上是关于java发送http请求(提交form表单)的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议-GET/POST请求

HTTP Post 表单

如何接收 HTML 表单请求

php form提交账户密码 怎么写验证

form表单的GET和POST请求

jsp页面:一个form,不同请求提交form