利用HttpWebRequest模拟表单提交 JQuery 的一个轻量级 Guid 字符串拓展插件. 轻量级Config文件AppSettings节点编辑帮助类
利用HttpWebRequest模拟表单提交
1 using System; 2 using System.Collections.Specialized; 3 using System.IO; 4 using System.Net; 5 using System.Text; 6 7 namespace Allyn.Common 8 { 9 public class HttpHelper 10 { 11 /// <summary> 12 /// 获取指定路径数据 13 /// </summary> 14 /// <param name="requestUri">提交路径</param> 15 /// <param name="cookie">Cookie容器对象</param> 16 /// <returns>字符串结果</returns> 17 public static string GetForm(string requestUri, CookieContainer cookie) 18 { 19 HttpWebRequest request = WebRequest.CreateHttp(requestUri); 20 request.Method = "get"; 21 request.CookieContainer = cookie; 22 request.ContentLength = 0; 23 24 WebResponse response = request.GetResponse(); 25 StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 26 return reader.ReadToEnd(); 27 } 28 29 /// <summary> 30 /// 默认表单提交 31 /// </summary> 32 /// <param name="requestUri">提交路径</param> 33 /// <param name="postData">提交数据</param> 34 /// <param name="cookie">Cookie容器对象</param> 35 /// <returns>字符串结果</returns> 36 public static string PostForm(string requestUri, NameValueCollection postData, CookieContainer cookie) 37 { 38 HttpWebRequest request = WebRequest.CreateHttp(requestUri); 39 request.Method = "post"; 40 request.ContentType = "application/x-www-form-urlencoded"; 41 request.CookieContainer = cookie; 42 43 StringBuilder stringBuilder = new StringBuilder(); 44 foreach (string key in postData.Keys) 45 { 46 stringBuilder.AppendFormat("&{0}={1}", key, postData.Get(key)); 47 } 48 byte[] buffer = Encoding.UTF8.GetBytes(stringBuilder.ToString().Trim('&')); 49 Stream requestStream = request.GetRequestStream(); 50 requestStream.Write(buffer, 0, buffer.Length); 51 requestStream.Close(); 52 53 WebResponse response = request.GetResponse(); 54 StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 55 return reader.ReadToEnd(); 56 } 57 58 /// <summary> 59 /// 多部件表单提交 60 /// </summary> 61 /// <param name="requestUri">提交路径</param> 62 /// <param name="postData">提交数据.注:如果是文件路径,代表是文件.</param> 63 /// <param name="cookie">Cookie容器对象</param> 64 /// <returns>字符串结果</returns> 65 public static string PostFormMultipart(string requestUri, NameValueCollection postData, CookieContainer cookie) 66 { 67 string boundary = string.Format("-----{0}", DateTime.Now.Ticks.ToString("x")); 68 HttpWebRequest webrequest = WebRequest.CreateHttp(requestUri); 69 webrequest.CookieContainer = cookie; 70 webrequest.Timeout = 120000; 71 webrequest.Method = "post"; 72 webrequest.ContentType = string.Format("multipart/form-data; boundary={0}", boundary); 73 74 Stream requestStream = webrequest.GetRequestStream(); 75 foreach (string key in postData.Keys) 76 { 77 StringBuilder strBuilder = new StringBuilder(); 78 strBuilder.AppendFormat("--{0}", boundary); 79 strBuilder.AppendFormat("\r\nContent-Disposition: form-data; name=\"{0}\"", key); 80 if (File.Exists(postData.Get(key))) 81 { 82 strBuilder.AppendFormat(";filename=\"{0}\"\r\nContent-Type: multipart/form-data\r\n\r\n", Path.GetFileName(postData.Get(key))); 83 byte[] buffer = Encoding.UTF8.GetBytes(strBuilder.ToString()); 84 requestStream.Write(buffer, 0, buffer.Length); 85 //获取图片流 86 FileStream fileStream = new FileStream(postData.Get(key), FileMode.Open, FileAccess.Read); 87 BinaryReader binaryReader = new BinaryReader(fileStream); 88 byte[] fileBuffer = binaryReader.ReadBytes((int)fileStream.Length); 89 binaryReader.Close(); 90 fileStream.Close(); 91 requestStream.Write(fileBuffer, 0, fileBuffer.Length); 92 } 93 else 94 { 95 strBuilder.AppendFormat("\r\n\r\n{0}\r\n", postData.Get(key)); 96 byte[] buff = Encoding.UTF8.GetBytes(strBuilder.ToString()); 97 requestStream.Write(buff, 0, buff.Length); 98 } 99 } 100 101 byte[] boundaryBuffer = Encoding.UTF8.GetBytes(string.Format("\r\n--{0}\r\n", boundary)); 102 requestStream.Write(boundaryBuffer, 0, boundaryBuffer.Length); 103 requestStream.Close(); 104 105 WebResponse response = webrequest.GetResponse(); 106 StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 107 return reader.ReadToEnd(); 108 } 109 } 110 }
JQuery 的一个轻量级 Guid 字符串拓展插件.
1 (function ($) { 2 function guid(g) { 3 var arr = new Array(); //存放32位数值的数组 4 if (typeof (g) == "string") { //如果构造函数的参数为字符串 5 initializeByString(arr, g); 6 } else { 7 initializeByOther(arr); 8 } 9 //返回一个值,该值指示 Guid 的两个实例是否表示同一个值。 10 this.equals = function (o) { 11 if (o && o.isGuid()) { 12 return this.toString() == o.toString(); 13 } 14 else { 15 return false; 16 } 17 } 18 //Guid对象的标记 19 this.isGuid = function () { 20 return /^[0-9a-fA-F]{32}?$|^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}?$/.test(this); 21 } 22 //返回 Guid 类的此实例值的 String 表示形式。 23 this.toString = function (format) { 24 if (typeof (format) == "string") { 25 if (format == "N" || format == "D" || format == "B" || format == "P") { 26 return toStringWithFormat(arr, format); 27 } else { 28 return toStringWithFormat(arr, "D"); 29 } 30 } 31 else { 32 return toStringWithFormat(arr, "D"); 33 } 34 } 35 //由字符串加载 36 function initializeByString(arr, g) { 37 g = g.replace(/\{|\(|\)|\}|-/g, ""); 38 g = g.toLowerCase(); 39 if (g.length != 32 || g.search(/[^0-9,a-f]/i) != -1) { 40 initializeByOther(arr); 41 } else { 42 for (var i = 0; i < g.length; i++) { 43 arr.push(g[i]); 44 } 45 } 46 } 47 //由其他类型加载 48 function initializeByOther(arr) { 49 var i = 32; 50 while (i--) { 51 arr.push("0"); 52 } 53 } 54 /* 55 根据所提供的格式说明符,返回此 Guid 实例值的 String 表示形式。 56 N 32 位: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 57 D 由连字符分隔的 32 位数字 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 58 B 括在大括号中、由连字符分隔的 32 位数字:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 59 P 括在圆括号中、由连字符分隔的 32 位数字:(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) 60 */ 61 function toStringWithFormat(arr, format) { 62 switch (format) { 63 case "N": 64 return arr.toString().replace(/,/g, ""); 65 case "D": 66 var str = arr.slice(0, 8) + "-" + arr.slice(8, 12) + "-" + arr.slice(12, 16) + "-" + arr.slice(16, 20) + "-" + arr.slice(20, 32); 67 str = str.replace(/,/g, ""); 68 return str; 69 case "B": 70 var str = toStringWithFormat(arr, "D"); 71 str = "{" + str + "}"; 72 return str; 73 case "P": 74 var str = toStringWithFormat(arr, "D"); 75 str = "(" + str + ")"; 76 return str; 77 default: 78 return new Guid(); 79 } 80 } 81 } 82 $.extend({ guidEx: guid }); 83 $.extend($.guidEx, { 84 enpty: function () { 85 return new guid(); 86 }, 87 newGuid: function () { 88 var g = ""; 89 var i = 32; 90 while (i--) { 91 g += Math.floor(Math.random() * 16.0).toString(16); 92 } 93 return new guid(g); 94 }, 95 isGuid: function (g) { 96 return /^[0-9a-fA-F]{32}?$|^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}?$/.test(g); 97 } 98 }); 99 })(jQuery);
轻量级Config文件AppSettings节点编辑帮助类
1 using System.Configuration; 2 using System.Windows.Forms; 3 4 namespace Allyn.Common 5 { 6 public class XmlHeper 7 { 8 ///<summary> 9 ///返回Config文件中appSettings配置节的value项 10 ///</summary> 11 ///<param name="strKey">节点Key</param> 12 ///<returns>值</returns> 13 public static string GetAppConfig(string strKey) 14 { 15 string file = Application.ExecutablePath; 16 Configuration config = ConfigurationManager.OpenExeConfiguration(file); 17 18 foreach (string key in config.AppSettings.Settings.AllKeys) 19 { 20 if (key == strKey) 21 { 22 return config.AppSettings.Settings[strKey].Value.ToString(); 23 } 24 } 25 return string.Empty; 26 } 27 28 ///<summary> 29 ///在Config文件中appSettings配置节增加一对键值对 30 ///</summary> 31 ///<param name="newKey">节点名称</param> 32 ///<param name="newValue">信值</param> 33 public static void UpdateAppConfig(string newKey, string newValue) 34 { 35 string file = System.Windows.Forms.Application.ExecutablePath; 36 Configuration config = ConfigurationManager.OpenExeConfiguration(file); 37 38 bool exist = false; 39 40 foreach (string key in config.AppSettings.Settings.AllKeys) 41 { 42 if (key == newKey) { exist = true; } 43 } 44 45 if (exist) { config.AppSettings.Settings.Remove(newKey); } 46 47 config.AppSettings.Settings.Add(newKey, newValue); 48 config.Save(ConfigurationSaveMode.Modified); 49 50 ConfigurationManager.RefreshSection("appSettings"); 51 } 52 } 53 }
利用HttpWebRequest模拟表单提交 JQuery 的一个轻量级 Guid 字符串拓展插件. 轻量级Config文件AppSettings节点编辑帮助类的更多相关文章
- 利用HttpWebRequest模拟表单提交
using System; using System.Collections.Specialized; using System.IO; using System.Net; using System. ...
- JQuery 的一个轻量级 Guid 字符串拓展插件.
(function ($) { function guid(g) { var arr = new Array(); //存放32位数值的数组 if (typeof (g) == "strin ...
- C# Winform利用POST传值方式模拟表单提交数据(Winform与网页交互)
其原理是,利用winfrom模拟表单提交数据.将要提交的參数提交给网页,网页运行代码.得到数据.然后Winform程序将网页的全部源码读取下来.这样就达到windows应用程序和web应用程序之间传參 ...
- 项目总结15:JavaScript模拟表单提交(实现window.location.href-POST提交数据效果)
JavaScript模拟表单提交(实现window.location.href-POST提交数据效果) 前沿 1-在具体项目开发中,用window.location.href方法下载文件,因windo ...
- 由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载,但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。
由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载(这样的话ajax可以传递不同的参数),但是ajax实现的文 ...
- 表单提交---前端页面模拟表单提交(form)
有些时候我们的前端页面总没有<form></form>表单,但是具体的业务时,我们又必须用表单提交才能达到我们想要的结果,LZ最近做了一些关于导出的一些功能,需要调用浏览器默认 ...
- <记录> axios 模拟表单提交数据
ajax 可以通过 FormData 对象模拟表单提交数据 第一种方式:自定义FormData信息 //创建formData对象 var formData = new FormData(); //添加 ...
- HTTP通信模拟表单提交数据
前面记录过一篇关于http通信,发送数据的文章:http://www.cnblogs.com/hyyq/p/7089040.html,今天要记录的是如何通过http模拟表单提交数据. 一.通过GET请 ...
- 使用axios模拟表单提交
1.需求背景 最近在实验室写一个Spring前后端分离的项目,项目中使用Spring Security组件实现系统的认证和授权,当Security的认证模式设置为FormLogin时(如下代码),前端 ...
随机推荐
- Objective-c:NSFileHandle类,创建流对象,对文件进行写入、读取的操作
NSFileHandle类:它需要配合NSFileManager文件管理类,对文件内容进行操作,写入数据.读取数据. 使用步骤: 1.打开文件获取NSFileHandle类的对象 2. ...
- OpenCV学习(31) 基于defects的简单手势
前几年在做毕业设计时候曾用opencv1.0中defects做过简单的手势识别,这几天看OpenCV2.46中的轮廓函数,发现和以前差别挺大,函数调用完全不一样,重新实现了简单手势的代码. 1.首先用 ...
- WhyEngine游戏合集2014贺岁版
WhyEngine游戏合集2014贺岁版 自去年9月份开始写我的第一个小游戏,到现在为止,共实现了14个小游戏,10个屏保程序,7个DEMO程序.开发环境是VS2008,渲染使用的是D3D,所有代码都 ...
- 遇到Elements in iteration expect to have 'v-bind:key' directives.' 这个错误
解决方式一:更改VS Code编辑器的vetur配置 错误提示: [vue-language-server] Elements in iteration expect to have 'v-bind: ...
- 让 IE6, 7和 8支持CSS3的HTC文件补丁
让 IE6, 7和 8支持CSS3 IE6,7并不支持CSS3的属性,IE8也不能很好的支持CSS3.但是有一个小脚本能够做到,它可以让IE支持CSS3,包括:border-radius (round ...
- 页面的缓存设置与meta的作用详细解释
网上转的,来自JSP的,但是原理大同小异哦,有时间 写个asp.net版的 HTML的HTTP协议头信息中控制着页面在几个地方的缓存信息,包括浏览器端,中间缓存服务器端(如:squid等),Web服务 ...
- JavaScript字符串数组拼接的性能测试及优化方法
传统上,字符串连接一直是js中性能最低的操作之一. var text="Hello"; text+=" World!"; 早期浏览器没有对这种运算进行优化.由于 ...
- 深入理解JSON
一.JS判断字符串是否为JSON的方法: function isJSON(str) { if (typeof str == 'string') { try { JSON.parse(str); ret ...
- 以AVL树为例理解二叉树的旋转(Rotate)操作
树旋转是在二叉树中的一种子树调整操作, 每一次旋转并不影响对该二叉树进行中序遍历的结果. 树旋转通常应用于需要调整树的局部平衡性的场合. 树旋转包括两个不同的方式, 分别是左旋转和右旋转. 两种旋转呈 ...
- spark streaming的理解和应用
1.Spark Streaming简介 官方网站解释:http://spark.apache.org/docs/latest/streaming-programming-guide.html 该博客转 ...