C# 模拟发送请求到java后台 java代码接收处理参数的问题

前段时间接到一个需求,对接一个C#写的工具类,给我们的系统后台上传数据。

需求不难,很常见,于是为了方便。我就这样写了(java框架SSH):

C#模拟请求的代码

 public static void Main(string[] args)
        {
            String postData = fileToString("D:\\test\\json.txt");
            Console.WriteLine(postData);
            string url = "ip:端口/项目名/tensionGroution.do?method=uploadData&data=" + postData;
            Console.WriteLine("******************************************");
            if (postData != null)
                PostUrl(url, postData);

            Console.ReadKey();
        }

        public static string PostUrl(string url, string postData)
        {
            string result = "";

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.KeepAlive = false;
            req.ProtocolVersion = HttpVersion.Version10;
            req.Method = "POST";

            req.Timeout = 80000;//设置请求超时时间,单位为毫秒

            req.ContentType = "application/json";

            byte[] data = Encoding.UTF8.GetBytes(postData);

            req.ContentLength = data.Length;

            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);

                reqStream.Close();
            }

            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

            Stream stream = resp.GetResponseStream();

            //获取响应内容
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            Console.WriteLine(postData);
            return result;
        }

        public static string fileToString(String filePath)
        {
            if (!File.Exists(filePath))
            {
                Console.WriteLine("文件不存在");
                return null;
            }

            string strData = "";
            try
            {
                string line;
                // 创建一个 StreamReader 的实例来读取文件 ,using 语句也能关闭 StreamReader
                using (System.IO.StreamReader sr = new System.IO.StreamReader(filePath, System.Text.Encoding.GetEncoding("gb2312")))
                {
                    // 从文件读取并显示行,直到文件的末尾
                    while ((line = sr.ReadLine()) != null)
                    {

                        //Console.WriteLine(line);
                        strData += line;
                    }
                }
            }
            catch (Exception e)
            {
                // 向用户显示出错消息
                Console.WriteLine("The file could not be read:");
                Console.WriteLine(e.Message);
            }
            return strData;
        }



    }

提供上传路径,并且携带参数(json格式),通过C#的HttpWebRequest对象模拟了http的post请求。请求正常发送。

java后台也接收到了,接受方式是很常见的 :    String data = request.getParameter("data");

ok完成部署,测试无误。 但是用了一段时间后,问题来了

C#后台居然报错了

排查原因 原来是请求接口的参数惹的祸

当拼接的参数过长的 请求协议拒绝发送,所以报了错。

解决方案:

     在C#模拟请求的代码了发现这样一个类,其实已将操作了参数。

Stream 这个对象其实已经将参数以流的形式写入到请求中了,之前的操作并没有用。

了解到了Stream的原理之后,那么就改变了请求接口,不去携带参数,Stream对象去处理。

string url = "ip:端口/项目名/tensionGroution.do?method=uploadData";(修改后的接口)。

然后java后台接受这个参数也要处理了,显然就是读流了。

String tradeInfos = "";
		BufferedReader bufferedReader = new BufferedReader(
				new InputStreamReader(request.getInputStream(), "utf-8")); // 读取参数流

		String nextLine = bufferedReader.readLine();
		while (nextLine != null) {
			System.out.println(request.getCharacterEncoding());
			tradeInfos += nextLine;
			nextLine = bufferedReader.readLine();
		}
		System.out.println(tradeInfos);

这样,就顺利的得到了C#工具上传的数据的。

当然也有别的请求 和接受的方式,找一个最合适的才是最好的!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值