zoukankan      html  css  js  c++  java
  • 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(" ");  
    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.     } 
  • 相关阅读:
    拒绝服务攻击
    通过混合编程分析的方法和机器学习预测Web应用程序的漏洞
    防火墙与入侵防护系统
    恶意软件
    密码学
    纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat)
    C++调用DLL方法
    QQ IP 地址查询相关
    【C/C++】概念: VC虚函数布局引发的问题
    DLL/EXE查看工具Dumpbin
  • 原文地址:https://www.cnblogs.com/bobc/p/8809761.html
Copyright © 2011-2022 走看看