POST 发送数据,服务端接收遇到的奇葩问题

时间:2022-08-29 00:15:24
客户端 C#语言 POST请求发送数据
  public static string Post(string url, string content)
        {
            string result = "";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";

            #region 添加Post 参数
            byte[] data = Encoding.UTF8.GetBytes(content);
            req.ContentLength = data.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            #endregion

            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Stream stream = resp.GetResponseStream();
            //获取响应内容
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            return result;
        }


服务端 JAVA语言 接受数据

StringBuffer sb = new StringBuffer() ; 
  InputStream is = request.getInputStream(); 
  InputStreamReader isr = new InputStreamReader(is);   
  BufferedReader br = new BufferedReader(isr); 
  String s = "" ; 
  while((s=br.readLine())!=null){ 
  sb.append(s) ; 
  } 
  String result =sb.toString();


客户端使用"application/x-www-form-urlencoded" 方式 发送4MB json数据
服务。服务端正常接收。

json格式如下:
{"eqnum":"123456","datalist":[{"mDatetime":"2018-08-31 09:00:00","mDate":"2018-08-31","mTime":"21:00:00","mValue":-65536.0},{"mDatetime":"2018-08-31 09:01:00","mDate":"2018-08-31","mTime":"21:01:00","mValue":-65536.0}]}


但是同样的结构 同样的方式 同样的接口 通过减少datalist内容的方式,发送1MB json数据,服务端接到数据为空。改为"application/json"却是可以的

使用Fiddler,发现两次请求发送的时候 都是有值的。不明白为什么,求解惑。

3 个解决方案

#1


客户端向服务端发送 HTTP 请求工具类 CPostFile

http://www.verejava.com/?id=17896028983072

#2


当以application/json的content-type传送数据,被传送的对象只需被json序列化。当以application/x-www-form-urlencoded的方式传送数据。请求的内容需要以..=..&..=..的格式提交,在请求体内内容将会以”&”和“ = ”进行拆分。但你需要使用content-type=application/json且后台使用@RequestBody,你无法再从paramter中获取请求数据。

选择application/x-www-form-urlencoded还是application/json,得看你是否有从request.paramter获取请求数据的需求。

#3


啥呀兄弟啊等等

#1


客户端向服务端发送 HTTP 请求工具类 CPostFile

http://www.verejava.com/?id=17896028983072

#2


当以application/json的content-type传送数据,被传送的对象只需被json序列化。当以application/x-www-form-urlencoded的方式传送数据。请求的内容需要以..=..&..=..的格式提交,在请求体内内容将会以”&”和“ = ”进行拆分。但你需要使用content-type=application/json且后台使用@RequestBody,你无法再从paramter中获取请求数据。

选择application/x-www-form-urlencoded还是application/json,得看你是否有从request.paramter获取请求数据的需求。

#3


啥呀兄弟啊等等