经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
利用HttpWebRequest模拟表单提交
来源:cnblogs  作者:Allyn  时间:2018/12/27 9:53:54  对本文有异议
  1. 1 using System;
  2. 2 using System.Collections.Specialized;
  3. 3 using System.IO;
  4. 4 using System.Net;
  5. 5 using System.Text;
  6. 6
  7. 7 namespace Allyn.Common
  8. 8 {
  9. 9 public class HttpHelper
  10. 10 {
  11. 11 /// <summary>
  12. 12 /// 获取指定路径数据
  13. 13 /// </summary>
  14. 14 /// <param name="requestUri">提交路径</param>
  15. 15 /// <param name="cookie">Cookie容器对象</param>
  16. 16 /// <returns>字符串结果</returns>
  17. 17 public static string GetForm(string requestUri, CookieContainer cookie)
  18. 18 {
  19. 19 HttpWebRequest request = WebRequest.CreateHttp(requestUri);
  20. 20 request.Method = "get";
  21. 21 request.CookieContainer = cookie;
  22. 22 request.ContentLength = 0;
  23. 23
  24. 24 WebResponse response = request.GetResponse();
  25. 25 StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  26. 26 return reader.ReadToEnd();
  27. 27 }
  28. 28
  29. 29 /// <summary>
  30. 30 /// 默认表单提交
  31. 31 /// </summary>
  32. 32 /// <param name="requestUri">提交路径</param>
  33. 33 /// <param name="postData">提交数据</param>
  34. 34 /// <param name="cookie">Cookie容器对象</param>
  35. 35 /// <returns>字符串结果</returns>
  36. 36 public static string PostForm(string requestUri, NameValueCollection postData, CookieContainer cookie)
  37. 37 {
  38. 38 HttpWebRequest request = WebRequest.CreateHttp(requestUri);
  39. 39 request.Method = "post";
  40. 40 request.ContentType = "application/x-www-form-urlencoded";
  41. 41 request.CookieContainer = cookie;
  42. 42
  43. 43 StringBuilder stringBuilder = new StringBuilder();
  44. 44 foreach (string key in postData.Keys)
  45. 45 {
  46. 46 stringBuilder.AppendFormat("&{0}={1}", key, postData.Get(key));
  47. 47 }
  48. 48 byte[] buffer = Encoding.UTF8.GetBytes(stringBuilder.ToString().Trim('&'));
  49. 49 Stream requestStream = request.GetRequestStream();
  50. 50 requestStream.Write(buffer, 0, buffer.Length);
  51. 51 requestStream.Close();
  52. 52
  53. 53 WebResponse response = request.GetResponse();
  54. 54 StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  55. 55 return reader.ReadToEnd();
  56. 56 }
  57. 57
  58. 58 /// <summary>
  59. 59 /// 多部件表单提交
  60. 60 /// </summary>
  61. 61 /// <param name="requestUri">提交路径</param>
  62. 62 /// <param name="postData">提交数据.注:如果是文件路径,代表是文件.</param>
  63. 63 /// <param name="cookie">Cookie容器对象</param>
  64. 64 /// <returns>字符串结果</returns>
  65. 65 public static string PostFormMultipart(string requestUri, NameValueCollection postData, CookieContainer cookie)
  66. 66 {
  67. 67 string boundary = string.Format("-----{0}", DateTime.Now.Ticks.ToString("x"));
  68. 68 HttpWebRequest webrequest = WebRequest.CreateHttp(requestUri);
  69. 69 webrequest.CookieContainer = cookie;
  70. 70 webrequest.Timeout = 120000;
  71. 71 webrequest.Method = "post";
  72. 72 webrequest.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);
  73. 73
  74. 74 Stream requestStream = webrequest.GetRequestStream();
  75. 75 foreach (string key in postData.Keys)
  76. 76 {
  77. 77 StringBuilder strBuilder = new StringBuilder();
  78. 78 strBuilder.AppendFormat("--{0}", boundary);
  79. 79 strBuilder.AppendFormat("\r\nContent-Disposition: form-data; name=\"{0}\"", key);
  80. 80 if (File.Exists(postData.Get(key)))
  81. 81 {
  82. 82 strBuilder.AppendFormat(";filename=\"{0}\"\r\nContent-Type: multipart/form-data\r\n\r\n", Path.GetFileName(postData.Get(key)));
  83. 83 byte[] buffer = Encoding.UTF8.GetBytes(strBuilder.ToString());
  84. 84 requestStream.Write(buffer, 0, buffer.Length);
  85. 85 //获取图片流
  86. 86 FileStream fileStream = new FileStream(postData.Get(key), FileMode.Open, FileAccess.Read);
  87. 87 BinaryReader binaryReader = new BinaryReader(fileStream);
  88. 88 byte[] fileBuffer = binaryReader.ReadBytes((int)fileStream.Length);
  89. 89 binaryReader.Close();
  90. 90 fileStream.Close();
  91. 91 requestStream.Write(fileBuffer, 0, fileBuffer.Length);
  92. 92 }
  93. 93 else
  94. 94 {
  95. 95 strBuilder.AppendFormat("\r\n\r\n{0}\r\n", postData.Get(key));
  96. 96 byte[] buff = Encoding.UTF8.GetBytes(strBuilder.ToString());
  97. 97 requestStream.Write(buff, 0, buff.Length);
  98. 98 }
  99. 99 }
  100. 100
  101. 101 byte[] boundaryBuffer = Encoding.UTF8.GetBytes(string.Format("\r\n--{0}\r\n", boundary));
  102. 102 requestStream.Write(boundaryBuffer, 0, boundaryBuffer.Length);
  103. 103 requestStream.Close();
  104. 104
  105. 105 WebResponse response = webrequest.GetResponse();
  106. 106 StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  107. 107 return reader.ReadToEnd();
  108. 108 }
  109. 109 }
  110. 110 }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号