转:忘了.....

提交核心部分

/// <summary>  /// 使用Post方法获取字符串结果  /// </summary>  /// <param name="url"></param>  /// <param name="formItems">Post表单内容</param>  /// <param name="cookieContainer"></param>  /// <param name="timeOut">默认20秒</param>  /// <param name="encoding">响应内容的编码类型(默认utf-8)</param>  /// <returns></returns>  public static ResultData PostForm(string url, List<FormItemModel> formItems, CookieContainer cookieContainer = null, string refererUrl = null, Encoding encoding = null, int timeOut = 20000){//try//{HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);#region 初始化请求对象  request.Method = "POST";request.Timeout = timeOut;request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";request.KeepAlive = true;request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36";if (!string.IsNullOrEmpty(refererUrl))request.Referer = refererUrl;if (cookieContainer != null)request.CookieContainer = cookieContainer;#endregionstring boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");//分隔符  request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);//请求流  var postStream = new MemoryStream();#region 处理Form表单请求内容  //是否用Form上传文件  var formUploadFile = formItems != null && formItems.Count > 0;if (formUploadFile){//文件数据模板  string fileFormdataTemplate = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"" + "\r\nContent-Type: \"{2}\"" + "\r\n\r\n";//图片数据模板string picFormdataTemplate = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\";filename=\"{1}\"\r\nContent-Type:\"{2}\"\r\n\r\n";//文本数据模板  string dataFormdataTemplate = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}\r\n";foreach (var item in formItems){string formdata = null;switch (item.formItemType){case FormitemTypeEnum.文件://上传文件  formdata = string.Format(fileFormdataTemplate,item.Key, //表单键
                                item.FileName,item.Value);break;case FormitemTypeEnum.图片://上传图片formdata = string.Format(picFormdataTemplate,item.Key, //表单键
                                item.FileName,item.Value);break;case FormitemTypeEnum.文本:default://上传文本  formdata = string.Format(dataFormdataTemplate,item.Key,item.Value);break;}//统一处理  byte[] formdataBytes = null;//第一行不需要换行  //if (postStream.Length == 0)//    formdataBytes = Encoding.UTF8.GetBytes(formdata.Substring(2, formdata.Length - 2));//elseformdataBytes = Encoding.UTF8.GetBytes(formdata);postStream.Write(formdataBytes, 0, formdataBytes.Length);//写入文件内容  if (item.FileContent != null && item.FileContent.Length > 0){using (var stream = item.FileContent){byte[] buffer = new byte[1024];int bytesRead = 0;while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0){postStream.Write(buffer, 0, bytesRead);}}byte[] imgbyteend = Encoding.UTF8.GetBytes("\r\n");postStream.Write(imgbyteend, 0, imgbyteend.Length);}}//结尾  var footer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");postStream.Write(footer, 0, footer.Length);}else{request.ContentType = "application/x-www-form-urlencoded";}#endregionrequest.ContentLength = postStream.Length;#region 输入二进制流  if (postStream != null){postStream.Position = 0;//直接写入流  Stream requestStream = request.GetRequestStream();byte[] buffer = new byte[1024];int bytesRead = 0;while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0){requestStream.Write(buffer, 0, bytesRead);}////debug//postStream.Seek(0, SeekOrigin.Begin);//StreamReader sr = new StreamReader(postStream);//var postStr = sr.ReadToEnd();postStream.Close();//关闭文件访问
            }#endregionHttpWebResponse response = (HttpWebResponse)request.GetResponse();if (cookieContainer != null){response.Cookies = cookieContainer.GetCookies(response.ResponseUri);}using (Stream responseStream = response.GetResponseStream()){using (StreamReader myStreamReader = new StreamReader(responseStream, encoding ?? Encoding.UTF8)){string retString = myStreamReader.ReadToEnd();ZY_MicronewsResult mresult = JsonConvert.DeserializeObject<ZY_MicronewsResult>(retString);if (!string.IsNullOrEmpty(mresult.response)){return ResultData.Access();}else{return ResultData.Fail(mresult.error);}}}//}//catch (Exception ex)//{//    return ResultData.Fail(ex.Message);//}}

//实体类

/// <summary>  /// 表单数据项  /// </summary>  public class FormItemModel{public FormitemTypeEnum formItemType { get; set; } = FormitemTypeEnum.文本;/// <summary>  /// 表单键,request["key"]  /// </summary>  public string Key { set; get; }/// <summary>  /// 表单值,上传文件时忽略,request["key"].value/// 格式:application/octet-stream/// </summary>  public string Value { set; get; }public byte[] pic_bytes { get; set; }/// <summary>  /// 是否是文件  /// </summary>  public bool IsFile{get{if (FileContent == null || FileContent.Length == 0)return false;if (FileContent != null && FileContent.Length > 0 && string.IsNullOrWhiteSpace(FileName))throw new Exception("上传文件时 FileName 属性值不能为空");return true;}}/// <summary>  /// 上传的文件名  /// </summary>  public string FileName { set; get; }/// <summary>  /// 上传的文件内容  /// </summary>  public Stream FileContent { set; get; }/// <summary>/// 获取上传文件Model/// </summary>/// <param name="key">名称</param>/// <param name="value">内容</param>/// <returns></returns>public static FormItemModel GetTextModel(string key, string value){var model = new Model.Common.FormItemModel{Key = key,Value = value,formItemType = Model.Common.FormitemTypeEnum.文本};return model;}/// <summary>/// 获取上传文件Model/// </summary>/// <param name="url">url路径</param>/// <returns></returns>public static FormItemModel GetFileModel(string url){Uri uri = null;try{uri = new Uri(url);}catch{return null;}var bit = Model.Common.DownloadImg(uri.AbsoluteUri);System.IO.MemoryStream memo = new System.IO.MemoryStream();bit.Save(memo, System.Drawing.Imaging.ImageFormat.Jpeg);memo.Position = 0;var model = new Model.Common.FormItemModel{Key = "file",Value = "application/octet-stream",FileName = Path.GetFileName(uri.AbsoluteUri),formItemType = Model.Common.FormitemTypeEnum.文件,FileContent = memo};return model;}/// <summary>/// 获取上传图片Model/// </summary>/// <param name="url">url路径</param>/// <returns></returns>public static FormItemModel GetImgModel(string key, string url){Uri uri = null;try{uri = new Uri(url);}catch{return null;}var bit = Model.Common.DownloadImg(uri.AbsoluteUri);System.IO.MemoryStream memo = new System.IO.MemoryStream();bit.Save(memo, System.Drawing.Imaging.ImageFormat.Jpeg);memo.Position = 0;var model = new Model.Common.FormItemModel{Key = key,Value = "application/octet-stream",FileName = Path.GetFileName(uri.AbsoluteUri),formItemType = Model.Common.FormitemTypeEnum.图片,FileContent = memo};return model;}/// <summary>/// 获取上传图片Model/// </summary>/// <param name="key">名称</param>/// <param name="fileName">文件名</param>/// <param name="stream">文件流</param>/// <returns></returns>public static FormItemModel GetImgModel(string key, string fileName, Stream stream){stream.Position = 0;var model = new Model.Common.FormItemModel{Key = key,Value = "application/octet-stream",FileName = fileName,formItemType = Model.Common.FormitemTypeEnum.图片,FileContent = stream};return model;}}/// <summary>/// Form上传类型/// </summary>public enum FormitemTypeEnum{文本 = 0,文件 = 1,图片 = 2}

调用实例

string url = "http://xxxxx.com";List<Model.Common.FormItemModel> formItems = new List<Model.Common.FormItemModel>();formItems.Add(Model.Common.FormItemModel.GetTextModel("visible", "-1"));  //文本参数var imgs = model_MicroNews.MicroNews_imgurl.ToList();for (int i = 0; i < imgs.Count; i++){var img = imgs[i];formItems.Add(Model.Common.FormItemModel.GetImgModel("pic_" + (i + 1), "pic_" + (i + 1) + ".jpeg", img.stream));  //图片}var result = Model.Common.PostForm(url, formItems);

转载于:https://www.cnblogs.com/OleRookie/p/5948093.html

C# 模拟Form提交相关推荐

  1. 模拟form提交表单

    表单结构 模拟form提交表单,当点击按钮时执行form的submit()事件,表单的Name为接口所需参数名称,表单value为接口所需参数值 <!-- 模拟form表单提交 -->&l ...

  2. js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题...

    js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题 js模拟form表单提交数据源码: /** * js模拟form表单提交 * @param ...

  3. ajax 模拟表单提交,Ajax模拟Form表单提交,含多种数据上传

    ---恢复内容开始--- Ajax提交表单.使用FormData提交表单数据和上传的文件(这里的后台使用C#获取,你可以使用Java一样获取) 有时候前台的数据提交到后台,不想使用form表单上传,希 ...

  4. JS模拟Form表单提交

    用java写了一个下载的功能,测试没有问题,但前台就是不弹出下载的提示框. 后来发现如果你的提交方式是ajax的方式的话是不会弹出提示框的,然后换成了form提交,顺利弹框通过,下来我们就用js模拟f ...

  5. JS动态模拟Form表单提交数据

    分享知识  传递快乐 JS动态模拟Form表单提交数据 <!DOCTYPE html> <html lang="en"> <head><m ...

  6. curl模拟form表单提交

    curl模拟form表单提交 一. 首先,最简单的情况是我们只需要提交一个不带文件上传的表单,这种情况下,只需要在curl中使用–data(注意是–不是-)或者它的缩写-d即可. curl -d &q ...

  7. Excel 模拟form表单提交

    前端模拟form表单 function batSubmit() {var temp_form = document.createElement("form");//temp_for ...

  8. java 模拟form_java模拟form上传数据

    import java.io.*;import java.net.*;public classFileUpload {/*** 模拟form表单的形式 ,上传文件 以输出流的形式把文件写入到url中, ...

  9. Python模拟post提交表单数据 ——某二手车网站回拨电话的分析与利用

    Python模拟post提交表单数据 --某二手车网站回拨电话的分析与利用 在浏览某二手车网站的时候,发现可以提交手机号码,然后网站就会回拨给这个手机号,利用这个功能,可以实现一些目的.Python语 ...

  10. Java模拟Post 提交表单数据

    测试模拟post提交类: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; ...

最新文章

  1. (转)jQuery禁止右键菜单,全选
  2. linux心跳包检测代码_OpenSSL心跳包越界读敏感信息泄漏漏洞
  3. Linux中的终端、控制台、tty、pty等概念
  4. TensorFlow的一些基本概念
  5. PowerShell 7.0 RC 发布
  6. linux从虚拟磁盘启动,Linux虚拟磁盘实战
  7. 引用当前网站集下的样式文件
  8. C#获取文件/文件夹默认图标
  9. linux禁用scp命令,Linux系统如何关闭scp和sftp命令
  10. word自己新建样式,怎么加入目录?
  11. 【FinE】债券久期和凸性
  12. 安规X电容和Y电容的作用
  13. Conversion of feet/inches to meters-英尺、英里装换为米
  14. 我与北窗青年的2020丶
  15. GDI+绘图基础,绘制表格
  16. 使用redis所维护的代理池抓取微信文章
  17. python 方差齐性检验_已知F和sig值_方差齐性 sig_如何判断方差齐性_怎么判断方差齐不齐...
  18. 一日一技:极其简单,用Python写前端
  19. html样式zoom,CSS zoom属性用法及代码示例
  20. 富文本中添加字体选项功能_扑中的字体功能

热门文章

  1. 消息队列kafka知识总结
  2. 大型分布式Java项目--宜立方商城
  3. java gson json_Java利用gson处理json字符串
  4. python---日志模块log.py
  5. windows c++ 服务 当前用户提权_关于Windows下的提权方式(上)
  6. 编译android源码 太慢,记编译Android源码的经历
  7. vue实现上移下移_vue.js实现组件间的上移下移
  8. php找零页面,找零问题
  9. java案例代码2-素数判断测试
  10. mongo与sql对比--来自网上