C#模拟网络POST请求
jopen
10年前
using System; using System.IO; using System.Net; using System.Text; using System.Collections.Generic; using System.Text.RegularExpressions; namespace scan { public class zzHttp { private const string sContentType = "application/x-www-form-urlencoded"; private const string sUserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; public static string Send(string data, string url) { return Send(Encoding.GetEncoding("UTF-8").GetBytes(data), url); } public static string Send(byte[] data, string url) { Stream responseStream; HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; if (request == null) { throw new ApplicationException(string.Format("Invalid url string: {0}", url)); } // request.UserAgent = sUserAgent; request.ContentType = sContentType; request.Method = "POST"; request.ContentLength = data.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(data, 0, data.Length); requestStream.Close(); try { responseStream = request.GetResponse().GetResponseStream(); } catch (Exception exception) { throw exception; } string str = string.Empty; using (StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8"))) { str = reader.ReadToEnd(); } responseStream.Close(); return str; } #region 同步通过POST方式发送数据 /// <summary> /// 通过POST方式发送数据 /// </summary> /// <param name="Url">url</param> /// <param name="postDataStr">Post数据</param> /// <param name="cookie">Cookie容器</param> /// <returns></returns> public string SendDataByPost(string Url, string postDataStr, ref CookieContainer cookie) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); if (cookie.Count == 0) { request.CookieContainer = new CookieContainer(); cookie = request.CookieContainer; } else { request.CookieContainer = cookie; } request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postDataStr.Length; //request.Timeout = 1000; //request.ReadWriteTimeout = 3000; Stream myRequestStream = request.GetRequestStream(); StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); myStreamWriter.Write(postDataStr); myStreamWriter.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; } #endregion #region 同步通过GET方式发送数据 /// <summary> /// 通过GET方式发送数据 /// </summary> /// <param name="Url">url</param> /// <param name="postDataStr">GET数据</param> /// <param name="cookie">Cookie容器</param> /// <returns></returns> public string SendDataByGET(string Url, string postDataStr, ref CookieContainer cookie) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr); if (cookie.Count == 0) { request.CookieContainer = new CookieContainer(); cookie = request.CookieContainer; } else { request.CookieContainer = cookie; } request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; } #endregion public string zzget(string Url,string getdata, string type) { try { System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url + (getdata == "" ? "" : "?") + getdata); // Get the response instance. wReq.Method = "GET"; wReq.ContentType = "text/html;charset=UTF-8"; System.Net.WebResponse wResp = wReq.GetResponse(); System.IO.Stream respStream = wResp.GetResponseStream(); // Dim reader As StreamReader = New StreamReader(respStream) using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type))) { return reader.ReadToEnd(); } } catch (System.Exception ex) { //errorMsg = ex.Message; } return ""; } ///<summary> ///采用post发送请求 ///</summary> ///<param name="URL">url地址</param> ///<param name="strPostdata">发送的数据</param> ///<returns></returns> public string zzpost(string URL, IDictionary<string, Object> strPostdata, string strEncoding) { //IDictionary<string, Object> idc = new Dictionary<string, object>(); StringBuilder data = new StringBuilder(); foreach (KeyValuePair<string, Object> param in strPostdata) { data.Append(param.Key).Append("="); data.Append(param.Value.ToString()); data.Append("&"); } data.Remove(data.Length- 1,1); Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.CookieContainer = new CookieContainer();//少了这句就不能登录 request.Method = "post"; request.Accept = "text/html, application/xhtml+xml, */*"; request.ContentType = "application/x-www-form-urlencoded"; byte[] buffer = encoding.GetBytes(data.ToString()); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); /* request.ContentLength = data.Length; Stream myRequestStream = request.GetRequestStream(); StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); myStreamWriter.Write(data); myStreamWriter.Close(); */ HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding(strEncoding))) { return reader.ReadToEnd(); } } /// <summary> /// 清除文本中Html的标签 /// </summary> /// <param name="Content"></param> /// <returns></returns> public static string ClearHtml(string Content) { Content = Zxj_ReplaceHtml("&#[^>]*;", "", Content); Content = Zxj_ReplaceHtml("</?marquee[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?object[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?param[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?embed[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?table[^>]*>", "", Content); Content = Zxj_ReplaceHtml(" ", "", Content); Content = Zxj_ReplaceHtml("</?tr[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?th[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?p[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?a[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?img[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?tbody[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?li[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?span[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?div[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?th[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?td[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?script[^>]*>", "", Content); Content = Zxj_ReplaceHtml("(javascript|jscript|vbscript|vbs):", "", Content); Content = Zxj_ReplaceHtml("on(mouse|exit|error|click|key)", "", Content); Content = Zxj_ReplaceHtml("<\\?xml[^>]*>", "", Content); Content = Zxj_ReplaceHtml("<\\/?[a-z]+:[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?font[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?b[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?u[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?i[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?strong[^>]*>", "", Content); Content = Zxj_ReplaceHtml("</?strong[^>]*>", "", Content); Content = Zxj_ReplaceHtml(" ", "", Content); Regex r = new Regex(@"\s+"); Content = r.Replace(Content, ""); Content.Trim(); string clearHtml = Content; return clearHtml; } /// <summary> /// 清除文本中的Html标签 /// </summary> /// <param name="patrn">要替换的标签正则表达式</param> /// <param name="strRep">替换为的内容</param> /// <param name="content">要替换的内容</param> /// <returns></returns> private static string Zxj_ReplaceHtml(string patrn, string strRep, string content) { if (string.IsNullOrEmpty(content)) { content = ""; } Regex rgEx = new Regex(patrn, RegexOptions.IgnoreCase); string strTxt = rgEx.Replace(content, strRep); return strTxt; } } }