C#模拟网络POST请求

jopen 9年前

    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;                }                            }        }