jayleke

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  73 随笔 :: 0 文章 :: 29 评论 :: 0 引用

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Net; 
using System.IO;

namespace Czt.Web 
{ 
    /// <summary> 
    /// 实现网站登录类 
    /// </summary> 
    public class Post 
    { 
        /// <summary> 
        /// 网站Cookies 
        /// </summary> 
        private string _cookieHeader = string.Empty; 
        public string CookieHeader 
        { 
            get 
            { 
                return _cookieHeader; 
            } 
            set 
            { 
                _cookieHeader = value; 
            } 
        } 
        /// <summary> 
        /// 网站编码 
        /// </summary> 
        private string _code = string.Empty; 
        public string Code 
        { 
            get { return _code; } 
            set { _code = value; } 
        }

 
        private string _pageContent = string.Empty; 
        public string PageContent 
        { 
            get { return _pageContent; } 
            set { _pageContent = value; } 
        }

        private Dictionary<string, string> _para = new Dictionary<string, string>(); 
        public Dictionary<string, string> Para 
        { 
            get { return _para; } 
            set { _para = value; } 
        }

 
        /**/ 
        /// <summary> 
        /// 功能描述:模拟登录页面,提交登录数据进行登录,并记录Header中的cookie 
        /// </summary> 
        /// <param name="strURL">登录数据提交的页面地址</param> 
        /// <param name="strArgs">用户登录数据</param> 
        /// <param name="strReferer">引用地址</param> 
        /// <param name="code">网站编码</param> 
        /// <returns>可以返回页面内容或不返回</returns> 
        public string PostData(string strURL, string strArgs, string strReferer, string code, string method) 
        { 
            return  PostData(strURL,  strArgs,  strReferer,  code,  method, string.Empty); 
        } 
        public string PostData(string strURL, string strArgs, string strReferer, string code, string method, string contentType) 
        { 
            try 
            { 
                string strResult = ""; 
                HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(strURL); 
                myHttpWebRequest.AllowAutoRedirect = true; 
                myHttpWebRequest.KeepAlive = true; 
                myHttpWebRequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*"; 
                myHttpWebRequest.Referer = strReferer;

 
                myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727)";

                if (string.IsNullOrEmpty(contentType)) 
                { 
                    myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; 
                } 
                else 
                { 
                    myHttpWebRequest.ContentType = "contentType"; 
                }

                myHttpWebRequest.Method = method;

                myHttpWebRequest.Headers.Add("Accept-Encoding", "gzip, deflate");

                if (myHttpWebRequest.CookieContainer == null) 
                { 
                    myHttpWebRequest.CookieContainer = new CookieContainer(); 
                }

                if (this.CookieHeader.Length > 0) 
                { 
                    myHttpWebRequest.Headers.Add("cookie:" + this.CookieHeader); 
                    myHttpWebRequest.CookieContainer.SetCookies(new Uri(strURL), this.CookieHeader); 
                }

 

                byte[] postData = Encoding.GetEncoding(code).GetBytes(strArgs); 
                myHttpWebRequest.ContentLength = postData.Length;

                System.IO.Stream PostStream = myHttpWebRequest.GetRequestStream(); 
                PostStream.Write(postData, 0, postData.Length); 
                PostStream.Close();

                HttpWebResponse response = null; 
                System.IO.StreamReader sr = null; 
                response = (HttpWebResponse)myHttpWebRequest.GetResponse();

 

                if (myHttpWebRequest.CookieContainer != null) 
                { 
                    this.CookieHeader = myHttpWebRequest.CookieContainer.GetCookieHeader(new Uri(strURL)); 
                }

                sr = new System.IO.StreamReader(response.GetResponseStream(), Encoding.GetEncoding(code));    //    //utf-8 
                strResult = sr.ReadToEnd(); 
                sr.Close(); 
                response.Close(); 
                return strResult; 
            } 
            catch (Exception ex) 
            { 
                Utilities.Document.Create("C:\\error.log", strArgs, true, Encoding.UTF8); 
            } 
            return string.Empty; 
        }

        /**/ 
        /// <summary> 
        /// 功能描述:在PostLogin成功登录后记录下Headers中的cookie,然后获取此网站上其他页面的内容 
        /// </summary> 
        /// <param name="strURL">获取网站的某页面的地址</param> 
        /// <param name="strReferer">引用的地址</param> 
        /// <returns>返回页面内容</returns> 
        public string GetPage(string strURL, string strReferer, string code) 
        { 
            return GetPage(strURL, strReferer,code,string.Empty); 
        } 
        public string GetPage(string strURL, string strReferer,string code,string contentType) 
        { 
            string strResult = ""; 
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(strURL); 
            myHttpWebRequest.AllowAutoRedirect = true; 
            myHttpWebRequest.KeepAlive = false; 
            myHttpWebRequest.Accept = "*/*"; 
            myHttpWebRequest.Referer = strReferer; 
            myHttpWebRequest.Headers.Add("Accept-Encoding", "gzip, deflate");

            myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727)"; 
            if (string.IsNullOrEmpty(contentType)) 
            { 
                myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; 
            } 
            else 
            { 
                myHttpWebRequest.ContentType = contentType; 
            } 
            myHttpWebRequest.Method = "GET";

            if (myHttpWebRequest.CookieContainer == null) 
            { 
                myHttpWebRequest.CookieContainer = new CookieContainer(); 
            }

            if (this.CookieHeader.Length > 0) 
            { 
                myHttpWebRequest.Headers.Add("cookie:" + this.CookieHeader); 
                myHttpWebRequest.CookieContainer.SetCookies(new Uri(strURL), this.CookieHeader); 
            }

 
            HttpWebResponse response = null; 
            System.IO.StreamReader sr = null; 
            response = (HttpWebResponse)myHttpWebRequest.GetResponse();

 
            Stream streamReceive; 
            string gzip = response.ContentEncoding;

            if (string.IsNullOrEmpty(gzip) || gzip.ToLower() != "gzip") 
            { 
                streamReceive = response.GetResponseStream(); 
            } 
            else 
            { 
                streamReceive = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress); 
            }

            sr = new System.IO.StreamReader(streamReceive, Encoding.GetEncoding(code));

            if (response.ContentLength > 1) 
            { 
                strResult = sr.ReadToEnd(); 
            } 
            else 
            { 
                char[] buffer=new char[256]; 
                int count = 0; 
                StringBuilder sb = new StringBuilder(); 
                while ((count = sr.Read(buffer, 0, buffer.Length)) > 0) 
                { 
                    sb.Append(new string(buffer)); 
                } 
                strResult = sb.ToString(); 
            } 
            sr.Close(); 
            response.Close(); 
            return strResult; 
        }

    } 
} 

posted on 2010-08-14 18:44  jayleke  阅读(...)  评论(... 编辑 收藏
葳蕤工作室