?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 }
利用HttpWebRequest模拟表单提交
原文地址:https://www.cnblogs.com/allyn/p/10177888.html