- 浏览: 189547 次
- 性别:
- 来自: 广州
文章分类
最新评论
封装类:
使用封装类进行提交
服务端接受数据
客户端form表单提交(不带图片参数)
将图片转化为二进制
备注:
1、封装类及发请求方法,参考自:http://blog.csdn.net/wangjijun0807/article/details/40053679?locationNum=15
2、服务端接收ResponseResult语句可忽略
3、带图片发送post请求的方法中,对图片的处理方法,放在了最后面
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; namespace WpfApplication1 { public static class FormUpload { private static readonly Encoding encoding = Encoding.UTF8; public static HttpWebResponse MultipartFormDataPost(string postUrl, string userAgent, Dictionary<string, object> postParameters) { string formDataBoundary = String.Format("----------{0:N}", Guid.NewGuid()); //string contentType = "multipart/form-data; boundary=" + formDataBoundary; string contentType = "multipart/form-data; boundary=" + formDataBoundary; byte[] formData = GetMultipartFormData(postParameters, formDataBoundary); return PostForm(postUrl, userAgent, contentType, formData); } private static HttpWebResponse PostForm(string postUrl, string userAgent, string contentType, byte[] formData) { HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest; if (request == null) { throw new NullReferenceException("request is not a http request"); } // Set up the request properties. request.Method = "POST"; request.ContentType = contentType; request.UserAgent = userAgent; request.CookieContainer = new CookieContainer(); request.ContentLength = formData.Length; // You could add authentication here as well if needed: // request.PreAuthenticate = true; // request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested; // request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes("username" + ":" + "password"))); // Send the form data to the request. using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(formData, 0, formData.Length); requestStream.Close(); } return request.GetResponse() as HttpWebResponse; } private static byte[] GetMultipartFormData(Dictionary<string, object> postParameters, string boundary) { Stream formDataStream = new System.IO.MemoryStream(); bool needsCLRF = false; foreach (var param in postParameters) { // Thanks to feedback from commenters, add a CRLF to allow multiple parameters to be added. // Skip it on the first parameter, add it to subsequent parameters. if (needsCLRF) formDataStream.Write(encoding.GetBytes("\r\n"), 0, encoding.GetByteCount("\r\n")); needsCLRF = true; if (param.Value is FileParameter) { FileParameter fileToUpload = (FileParameter)param.Value; // Add just the first part of this param, since we will write the file data directly to the Stream string header = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\"\r\nContent-Type: {3}\r\n\r\n", boundary, param.Key, fileToUpload.FileName ?? param.Key, fileToUpload.ContentType ?? "application/octet-stream"); formDataStream.Write(encoding.GetBytes(header), 0, encoding.GetByteCount(header)); // Write the file data directly to the Stream, rather than serializing it to a string. formDataStream.Write(fileToUpload.File, 0, fileToUpload.File.Length); } else { string postData = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}", boundary, param.Key, param.Value); formDataStream.Write(encoding.GetBytes(postData), 0, encoding.GetByteCount(postData)); } } // Add the end of the request. Start with a newline string footer = "\r\n--" + boundary + "--\r\n"; formDataStream.Write(encoding.GetBytes(footer), 0, encoding.GetByteCount(footer)); // Dump the Stream into a byte[] formDataStream.Position = 0; byte[] formData = new byte[formDataStream.Length]; formDataStream.Read(formData, 0, formData.Length); formDataStream.Close(); return formData; } public class FileParameter { public byte[] File { get; set; } public string FileName { get; set; } public string ContentType { get; set; } public FileParameter(byte[] file) : this(file, null) { } public FileParameter(byte[] file, string filename) : this(file, filename, null) { } public FileParameter(byte[] file, string filename, string contenttype) { File = file; FileName = filename; ContentType = contenttype; } } } }
使用封装类进行提交
Dictionary<string, object> postParameters = new Dictionary<string, object>(); postParameters.Add("token", "123465789"); //postParameters.Add("paramB", "value2"); //postParameters.Add("paramC", "value3"); byte[] data = ReadImageFile("c:\\123456.png"); postParameters.Add("file1", new FormUpload.FileParameter(data, "123456.png", "image/png")); // Create request and receive response string postURL = "http://localhost:4806/WebApi/V1/Account/ChangeUserCard"; string userAgent = "Someone"; HttpWebResponse webResponse = FormUpload.MultipartFormDataPost(postURL, userAgent, postParameters); // Process response StreamReader responseReader = new StreamReader(webResponse.GetResponseStream()); string fullResponse = responseReader.ReadToEnd(); Console.WriteLine(fullResponse); Console.ReadKey();
服务端接受数据
HttpRequest request = System.Web.HttpContext.Current.Request; string token = request.Form["token"].ToString(); if (request.Files.Count <= 0) //如果file集合的数量小于等于0,则返回错误 return ResponseResult.GenFaildResponse(ResultCode.CodeTypeIsNull); foreach (string str in request.Files) { HttpPostedFile FileSave = request.Files[str]; //用key获取单个文件对象HttpPostedFile string AbsolutePath = "C:\\" + FileSave.FileName; //设置要存储的图片的绝对路径 try { FileSave.SaveAs(AbsolutePath); //将上传的东西保存 } catch { WebAPIHelper.RecordOperationLog("1111","1111"); } }
客户端form表单提交(不带图片参数)
string postData = "user=123&pass=456"; // 要发放的数据 byte[] byteArray = Encoding.UTF8.GetBytes(postData); string url = "http://localhost:4806/WebApi/V1/Account/ChangeUserCard"; //定义发送请求的地址 HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create(url); objWebRequest.Method = "POST"; objWebRequest.ContentType = "application/x-www-form-urlencoded"; objWebRequest.ContentLength = byteArray.Length; Stream newStream = objWebRequest.GetRequestStream(); // Send the data. newStream.Write(byteArray, 0, byteArray.Length); //写入参数 newStream.Close(); HttpWebResponse response = (HttpWebResponse)objWebRequest.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default); string textResponse = sr.ReadToEnd(); // 返回的数据
将图片转化为二进制
private static byte[] ReadImageFile(string path) { FileStream fs = File.OpenRead(path); //OpenRead int filelength = 0; filelength = (int)fs.Length; //获得文件长度 Byte[] image = new Byte[filelength]; //建立一个字节数组 fs.Read(image, 0, filelength); //按字节流读取 System.Drawing.Image img = System.Drawing.Image.FromStream(fs); return ImgHelper.ImageToBytes(img); //Console.WriteLine(array.ToString()); //Console.ReadKey(); }
备注:
1、封装类及发请求方法,参考自:http://blog.csdn.net/wangjijun0807/article/details/40053679?locationNum=15
2、服务端接收ResponseResult语句可忽略
3、带图片发送post请求的方法中,对图片的处理方法,放在了最后面
发表评论
-
枚举类型帮助类 EnumHelper
2019-09-02 11:29 520项目中出现的问题: 项目中会有很多地方用到文字提醒,如果在每个 ... -
C# zip文件解压压缩帮助类
2019-08-30 11:43 585原文: https://www.cnblogs.com/sun ... -
使用ITextSharp对pdf文件打水印
2019-08-19 17:13 783在项目中需要对pdf文件中的部分信息进行遮挡隐藏,于是找到了I ... -
HMAC_SHA1加密
2019-08-16 10:36 981hmacsha1在很多签名计算中都很常用了,这里对两种可能返回 ... -
.NET/java Office组件神器——Aspose.Total 17.x/18.x/19.x破解版+破解补丁下载【转】
2019-07-29 15:22 2672先上大神的网站地址: [url] https://masuit ... -
通过UserAgent判断智能手机(设备,Android,IOS)【转】
2019-07-02 17:51 1040///<summary> /// ... -
8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码【转】
2019-06-12 17:36 2308服务器使用了word的类库,在使用过程中日志报标题错误 解决 ... -
C#(同步调用、异步调用、异步回调)--转
2019-06-05 12:04 708本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例 ... -
C# 利用word书签写入自定义数据
2019-05-14 18:08 647原文参考地址: https://www.cnblogs.com ... -
C# 项目中引用office组件后在服务器遇到的问题集锦
2019-02-13 16:03 9481、要在服务器安装相同版本的office完整版程序 本地测试机 ... -
C# word转pdf
2019-01-17 14:55 678写在最前面,如果要部署,服务器需要安装相同版本的office, ... -
C# 操作word
2019-01-17 14:49 521需要单独引入的是COM中的Microsoft Office 1 ... -
给上传的文件生成缩略图(图片和视频)
2018-11-28 17:47 891备注:里面用到的ffmpeg ... -
获取视频文件的截图
2018-11-28 17:36 695视频获取第一帧截图的方法: https://www.cnblo ... -
excel文件转为DataTable
2018-11-02 17:38 1596在人员初始化的时候,通常会用到excel编辑好,导入到数据库中 ... -
DataTable导出excel
2018-11-02 16:36 1150网上有很多关于导出的例子,这里讲一个利用NPOI导出excel ... -
未能加载文件或程序集,System.Net.Http或它的某一个依赖项。系统找不到指定的文件。
2018-10-30 17:21 4723具体的错误描述: 未能加载文件或程序集“System.Net. ... -
将app请求的简单json串转化为字典
2017-11-16 11:18 816通过Newtonsoft的DeserializeObject& ... -
WebAPI启用session功能
2017-11-16 11:04 1759第一步:简单建立两个类,以备修改WebApi的路由方式 第一 ... -
webapi记录请求和返回日志
2017-11-15 17:12 2144需求: 记录每个接口的请求参数及返回参数,方便以后回溯 fi ...
相关推荐
为了模拟更复杂的浏览器请求,如POST请求,你需要设置请求头和请求体。例如,对于一个POST请求,你可以这样做: ```csharp using System.Net.Http.Headers; // ... static async Task SendPostRequestAsync...
本示例旨在帮助开发者调试针对Ajax请求的后台接口,确保它们能够正确处理跨域请求、支持Ajax方式并且能返回预期的数据。 首先,我们需要理解什么是跨域问题。由于浏览器的安全策略,同一源策略限制了JavaScript只能...
这个工具对于后端接口的调试和测试工作极其有用,因为它允许开发者模拟不同的网络请求,并查看服务器的响应,从而帮助找出可能存在的问题或优化接口性能。 在使用HttpClient进行web请求时,首先需要创建一个...
发送短信前,记得先在创蓝后台开启测试模式,这样不会实际发送短信,而是返回模拟结果。测试成功后,再切换到正式环境,确保一切正常。 总的来说,接入创蓝短信服务涉及网络编程、JSON操作和错误处理等基本技能。`...
这些库允许我们构造GET或POST请求,并设置请求头,如`Accept`(指定接收的数据格式)和`User-Agent`(模拟浏览器)。 2. **JSON解析**:大多数天气API返回的数据格式是JSON(JavaScript Object Notation),因此...
Auto.js 的文档分为多个模块,包括自动操作、应用、设备、控制台、脚本引擎、事件与监听、悬浮窗、文件系统、HTTP、图片和图色处理、按键模拟、Shell 命令、多线程支持、UI 界面等。 自动操作模块中,基于控件和...
综上所述,创建一个仿QQ2008的登录界面涉及到C#的Windows Forms应用开发,UI设计,事件处理,数据验证,密码安全,模拟网络请求,错误处理,代码组织,以及测试与调试等多个关键知识点。通过实践这些技能,开发者...
作为一个插件,Postman在各种操作系统上都可以使用,包括Mac版,它允许用户轻松地发送HTTP请求并接收响应,以此来测试和理解后台接口的功能。 1. **Postman的基本功能**: - **请求构造**:Postman支持GET、POST、...
创建一个服务提供者和服务类,用于处理 PayTM 请求和响应。在 `app/Providers` 目录下创建一个新的服务提供者,例如 `PaytmServiceProvider.php`,并注册 PayTM 客户端实例到服务容器中。 在 `app/Services` 目录下...
服务器需要处理与FCM的接口交互,包括构建推送消息、编码消息内容、以及发送POST请求到FCM服务器。 4. **处理推送消息**:在Android客户端,你需要定义一个BroadcastReceiver来接收来自FCM的消息。接收到消息后,...
这段代码中,我们使用 axios 库来请求虚拟的 API,获取虚拟的数据 getBoardList,并在控制台中打印出返回的数据。 使用 mock 数据可以加速 vue 项目的开发速度,减少对真实后台接口的依赖。通过使用 mockjs 库和 ...
- **wp-comments-post.php**:接收用户提交的评论,并将其存储到数据库中,是用户互动的关键。 - **wp-commentsrss2.php**:生成RSS2格式的评论信息聚合,方便用户订阅和跟踪评论动态。 - **wp-config-sample....
3. `MyFirebaseMessagingService.java`: 自定义的Firebase消息服务,会接收到FCM服务器发送过来的消息并进行处理,例如展示通知或者进行后台逻辑处理。 服务器端的实现通常涉及到创建和发送推送消息到FCM服务。这...
在IT领域,Windows服务是一种在后台运行的程序,它不受用户界面的影响,可以在系统启动时自动启动,并且能够持续运行,通常用于执行计划任务或提供持续的服务。C#作为.NET框架的主要编程语言,提供了丰富的API来创建...
服务工作者主要负责拦截网络请求,并根据预设策略进行处理。它们在安装时会被注册到特定的源和路径,一旦激活,就能接管对指定范围内的网络请求。服务工作者不直接与用户交互,但可以通过`postMessage()` API与主线...
为了使后台能返回更复杂的结构,例如数组,我们可以修改jQuery代码,使用`$.ajax`方法并设置`dataType: "json"`。这要求服务器返回JSON格式的数据。修改后的HTML代码如下: ```html <title>JQueryAjax+...
只需将前端返回的验证结果填入调试工具,然后模拟发送请求,查看返回的验证结果,以确保前端与腾讯云的交互正常。 总结一下,Vue项目中调用腾讯云滑动验证码的步骤包括: 1. 注册腾讯云验证码服务,获取AppID和App...