[工具类]模拟请求时提交大字符串

简介:

写在前面

开发中也会经常用到模拟请求的东东,有时候提交的数据比较大,一般的方式就不行了,这个时候,下面的方式就会更好的解决你的问题。

方法

提交的数据比较大的时候,就会用到这个方法,当然可以对该方法进行修改一下,也可以提交文件。

复制代码
        /// <summary>
        /// 提交大数据量
        /// </summary>
        /// <param name="url"></param>
        /// <param name="postData"></param>
        /// <returns></returns>
        public static string PostBigString(string url, string postData)
        {
            string responseContent;
            var memStream = new MemoryStream();
            var webRequest = (HttpWebRequest)WebRequest.Create(url);
            // 边界符  
            var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
            // 边界符  
            var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
            //var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            // 最后的结束符  
            var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");

            // 设置属性  
            webRequest.Method = "POST";
            webRequest.Timeout = 40000;
            webRequest.ContentType = "multipart/form-data; boundary=" + boundary;

            // 写入文件  
            const string filePartHeader =
                "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" +
                 "Content-Type: application/octet-stream\r\n\r\n";
            var header = string.Format(filePartHeader, "", "");
            var headerbytes = Encoding.UTF8.GetBytes(header);

            memStream.Write(beginBoundary, 0, beginBoundary.Length);
            memStream.Write(headerbytes, 0, headerbytes.Length);

            var buffer = Encoding.UTF8.GetBytes(postData);


            // 写入字符串的Key  
            var stringKeyHeader = "\r\n--" + boundary +
                                   "\r\nContent-Disposition: form-data; name=\"{0}\"" +
                                   "\r\n\r\n{1}\r\n";
            string formitem = string.Format(stringKeyHeader, "value", postData);
            byte[] formitembytes = Encoding.UTF8.GetBytes(formitem);
            memStream.Write(formitembytes, 0, formitembytes.Length);
            // 写入最后的结束边界符  
            memStream.Write(endBoundary, 0, endBoundary.Length);

            webRequest.ContentLength = memStream.Length;

            var requestStream = webRequest.GetRequestStream();

            memStream.Position = 0;
            var tempBuffer = new byte[memStream.Length];
            memStream.Read(tempBuffer, 0, tempBuffer.Length);
            memStream.Close();

            requestStream.Write(tempBuffer, 0, tempBuffer.Length);
            //requestStream.Close(); //加入这行会报错!

            var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();

            using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(),
                                                            Encoding.GetEncoding("utf-8")))
            {
                responseContent = httpStreamReader.ReadToEnd();
            }


            httpWebResponse.Close();
            webRequest.Abort();

            return responseContent;
        }
复制代码

普通的模拟post请求的方法

复制代码
        /// <summary>
        /// post请求
        /// </summary>
        /// <param name="url">请求的地址</param>
        /// <param name="postdata">参数</param>
        /// <returns></returns>
        public static string PostString(string url, string postdata)
        {
            string strJson = string.Empty;
            try
            {
                byte[] buffer = Encoding.UTF8.GetBytes(postdata);
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
                request.Method = "POST";
                request.Accept = "application/json;charset:utf-8";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = buffer.Length;
                using (Stream requestStream = request.GetRequestStream())
                {
                    requestStream.Write(buffer, 0, buffer.Length);
                }
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                    {
                        strJson = sr.ReadToEnd();
                    }
                }
                return strJson;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
复制代码

对于一般的post请求,上面的方法已经能解决了,但是对应提交的数据比较大的时候,上面的这个方法就会显得力不从心了。

总结

在项目中,经常用到模拟请求某个接口的情况,不想每次都去f12查看请求头的东西,这也算总结一下,方便以后的使用。

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/4977625.html

相关文章
|
1月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
33 0
|
5月前
|
JSON 前端开发 Java
表单数据序列化,后台如何接收(java)
表单数据序列化,后台如何接收(java)
|
5月前
|
JSON 小程序 前端开发
小程序模拟请求服务器json数据
小程序模拟请求服务器json数据
182 0
|
4月前
|
JSON 前端开发 Java
SpringBoot 入门 参数接收 必传参数 数组 集合 时间接收
SpringBoot 入门 参数接收 必传参数 数组 集合 时间接收
|
3月前
|
JSON 机器人 数据格式
阿里云RPA支持将序列化的JSON数据作为输入参数传递给机器人应用程序
【1月更文挑战第7天】【1月更文挑战第33篇】阿里云RPA支持将序列化的JSON数据作为输入参数传递给机器人应用程序
206 1
|
4月前
|
JSON 前端开发 JavaScript
Java接收前端请求体方式
Java接收前端请求体方式
40 0
|
5月前
|
JSON Java 数据格式
万字长文讲解调用第三方接口,RestTemplate,urlConnection使用详解,java代码模拟postman发送请求
万字长文讲解调用第三方接口,RestTemplate,urlConnection使用详解,java代码模拟postman发送请求
48 0
万字长文讲解调用第三方接口,RestTemplate,urlConnection使用详解,java代码模拟postman发送请求
|
数据采集 Python
爬虫第二次笔记 解编码 使用get请求方式和post请求方式
爬虫第二次笔记 解编码 使用get请求方式和post请求方式
203 0
爬虫第二次笔记 解编码 使用get请求方式和post请求方式
|
JSON 前端开发 Java
使用postman传递list集合后台springmvc接收
使用postman传递list集合后台springmvc接收
384 0
 使用postman传递list集合后台springmvc接收
|
JavaScript 测试技术
接口测试平台代码实现38: 请求体保存-end
接口测试平台代码实现38: 请求体保存-end
接口测试平台代码实现38: 请求体保存-end