Java Post 数据请求和接收

这两天在做http服务端请求操作,客户端post数据到服务端后,服务端通过request.getParameter()进行请求,无法读取到数据,搜索了一下发现是因为设置为text/plain模式才导致读取不到数据

   urlConn.setRequestProperty("Content-Type","text/plain; charset=utf-8");

若设置为以下方式,则通过request.getParameter()可以读取到数据

   urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

enctype的三种编码

form表单中enctype属性可以用来控制对表单数据的发送前的如何进行编码,即在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。默认是application/x-www-form-urlencoded。

multipart/form-data用于发送二进制的文件,其他两种类型不能用于发送文件

text/plain用于发送纯文本内容,不对特殊字符进行编码,一般用于email之类的。

application/x-www-form-urlencoded和text/plain的区别简单讲就是一个发送html内容,一个发送纯文本内容

    application/x-www-form-urlencoded 在发送前编码所有字符(默认)multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。text/plain 空格转换为 "+" 加号,但不对特殊字符编码。

当定义enctype为application/x-www-form-urlencoded时,使用以下方式接收数据

       request.getParameter(参数名);

当定义enctype为text/plain时,使用以下方式接收数据

        // 接收请求数据        BufferedReader reader = request.getReader();        char[] buf = new char[512];        int len = 0;        StringBuffer contentBuffer = new StringBuffer();        while ((len = reader.read(buf)) != -1) {            contentBuffer.append(buf, 0, len);        }        String content = contentBuffer.toString();                if(content == null){            content = "";        }

post 与get

post和get可以通过键值对的方式进行参数传输,服务端通过request.getparameter方式进行请求获取数据。

客户毒post提交数据

    public static String sendPost(String url, String postData) {      String returnData= "";    String line                     = "";     String message= "";        BufferedReader bufferedReader = null;                        try {                        URL urlObject = new URL(url);              System.out.println("rrtong的postData:"+postData);            // 打开和URL之间的连接              HttpURLConnection urlConn = (HttpURLConnection)urlObject.openConnection();                          /*设置文件类型*/            //urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");            urlConn.setRequestProperty("Content-Type","text/plain; charset=utf-8");            /*维持长连接*/            urlConn.setRequestProperty("Connection", "Keep-Alive");            /*设置字符集*/            urlConn.setRequestProperty("Charset", "UTF-8");            /*设置使用POST的方式发送*/            urlConn.setRequestMethod("POST");                         /*设置不使用缓存*/            urlConn.setUseCaches(false);            /*设置容许输出*/            urlConn.setDoOutput(true);              /*设置容许输入*/            urlConn.setDoInput(true);                          /*设置连接超时*/            urlConn.setConnectTimeout(5 * 6 * 1000);                    // 获取URLConnection对象对应的输出流               DataOutputStream dataOutputStream = new DataOutputStream(urlConn.getOutputStream());            //utf-8发送请求参数               dataOutputStream.write(postData.getBytes("UTF-8"));            /*输出数据流*/            dataOutputStream.flush();                       if(urlConn.getResponseCode() != 200){            returnData ="{\&;head\&;:{\&;returnCode\&;:"+ urlConn.getResponseCode() +",\&;returnMsg\&;:\&;网络连接异常\&;},\&;body\&;:{}}";                                       message = "发送POST失败!"+                      "code="+urlConn.getResponseCode()+","+                      "失败消息:"+ urlConn.getResponseMessage();                // 定义BufferedReader输入流来读取URL的响应                InputStream errorStream = urlConn.getErrorStream();                                 if(errorStream != null)                {                InputStreamReader inputStreamReader = new InputStreamReader(errorStream,"utf-8");                bufferedReader = new BufferedReader(inputStreamReader);                            while ((line = bufferedReader.readLine()) != null) {                  message += line;                }                         inputStreamReader.close();                }                errorStream.close();                log.info("发送失败!错误信息为:"+message);              }            else{                // 定义BufferedReader输入流来读取URL的响应                InputStream inputStream = urlConn.getInputStream();                                  InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf-8");                bufferedReader = new BufferedReader(inputStreamReader);                            while ((line = bufferedReader.readLine()) != null) {                  message += line;                  }                        returnData = message;                inputStream.close();                inputStreamReader.close();                                log.info("发送POST成功!返回内容为:" + message);              }            /*断开网络连接*/            urlConn.disconnect();                    } catch (Exception e) {              System.out.println("发送POST请求出现异常!" + e);              e.printStackTrace();          }          finally {              try {                   if (bufferedReader != null) {                  bufferedReader.close();                  }                              } catch (IOException ex) {                  ex.printStackTrace();              }          }                return returnData;    }  

都会有回报,愿你天天开心。

Java Post 数据请求和接收

相关文章:

你感兴趣的文章:

标签云: