C# HttpWebRequest 通用类1

    /* 
     
    使用方法: 
    MyHttp loHttp = new MyHttp(); 
    string lcHtml = ""; 
     
    loHttp.HandleCookies = true;//操作Cookies 
    loHttp.Method = "GET"; 
    lcHtml = loHttp.GetUrl("http://signin.ebay.com.cn/ws2/eBayISAPI.dll?SignIn&ssPageName=h:h:sout:CN"); 
     
    loHttp.AddPostKey("Key", "Value"); 
    loHttp.Referer = "http://signin.ebay.com.cn/ws2/eBayISAPI.dll?SignIn&ssPageName=h:h:sout:CN"; 
     
    loHttp.Method = "POST"; 
    lcHtml = loHttp.GetUrl("http://signin.ebay.com.cn/ws2/eBayISAPI.dll"); 
     
    MessageBox.Show(loHttp.ErrorMsg); 
    MessageBox.Show(lcHtml); 
     
    */  
      
    using System;  
    using System.Collections;  
    using System.Text;  
    using System.Web;  
    using System.Windows.Forms;//only For Use MessageBox  
    using System.Net;  
    using System.IO;  
    using System.Diagnostics;  
      
    namespace HttpWeb  
    {  
        public class MyHttp  
        {  
            /// <summary>  
            /// User name used for Authentication.   
            /// To use the currently logged in user when accessing an NTLM resource you can use "AUTOLOGIN".  
            /// </summary>  
            public string Username  
            {  
                get { return this.cUsername; }  
                set { cUsername = value; }  
            }  
      
            /// <summary>  
            /// Password for Authentication.  
            /// </summary>  
            public string Password  
            {  
                get { return this.cPassword; }  
                set { this.cPassword = value; }  
            }  
      
            /// <summary>  
            /// Address of the Proxy Server to be used.  
            /// Use optional DEFAULTPROXY value to specify that you want to IE's Proxy Settings  
            /// </summary>  
            public string ProxyAddress  
            {  
                get { return this.cProxyAddress; }  
                set { this.cProxyAddress = value; }  
            }  
      
            /// <summary>  
            /// Semicolon separated Address list of the servers the proxy is not used for.  
            /// </summary>  
            public string ProxyBypass  
            {  
                get { return this.cProxyBypass; }  
                set { this.cProxyBypass = value; }  
            }  
      
            /// <summary>  
            /// Username for a password validating Proxy. Only used if the proxy info is set.  
            /// </summary>  
            public string ProxyUsername  
            {  
                get { return this.cProxyUsername; }  
                set { this.cProxyUsername = value; }  
            }  
            /// <summary>  
            /// Password for a password validating Proxy. Only used if the proxy info is set.  
            /// </summary>  
            public string ProxyPassword  
            {  
                get { return this.cProxyPassword; }  
                set { this.cProxyPassword = value; }  
            }  
      
            /// <summary>  
            /// Timeout for the Web request in seconds. Times out on connection, read and send operations.  
            /// Default is 30 seconds.  
            /// </summary>  
            public int Timeout  
            {  
                get { return this.nConnectTimeout; }  
                set { this.nConnectTimeout = value; }  
            }  
      
      
            public bool HandleReferer  
            {  
                get { return this.bHandleReferer; }  
                set { this.bHandleReferer = value; }  
            }  
      
            /// <summary>  
            /// 引用页  
            /// </summary>  
            public string Referer  
            {  
                get { return this.cReferer; }  
                set { this.cReferer = value; }  
            }  
      
            /// <summary>  
            /// 提交模式,默认是POST,用GET模式的时候不能使用PostData  
            /// </summary>  
            /// <value></value>  
            public string Method  
            {  
                get { return this.cMethod; }  
                set { this.cMethod = value; }  
            }  
            /// <summary>  
            /// Error Message if the Error Flag is set or an error value is returned from a method.  
            /// </summary>  
            public string ErrorMsg  
            {  
                get { return this.cErrorMsg; }  
                set { this.cErrorMsg = value; }  
            }  
      
            /// <summary>  
            /// Error flag if an error occurred.  
            /// </summary>  
            public bool Error  
            {  
                get { return this.bError; }  
                set { this.bError = value; }  
            }  
      
            /// <summary>  
            /// Determines whether errors cause exceptions to be thrown. By default errors   
            /// are handled in the class and the Error property is set for error conditions.  
            /// (not implemented at this time).  
            /// </summary>  
            public bool ThrowExceptions  
            {  
                get { return bThrowExceptions; }  
                set { this.bThrowExceptions = value; }  
            }  
      
            /// <summary>  
            /// If set to a non-zero value will automatically track cookies. The number assigned is the cookie count.  
            /// </summary>  
            public bool HandleCookies  
            {  
                get { return this.bHandleCookies; }  
                set { this.bHandleCookies = value; }  
            }  
            //Cookies集合  
            public CookieCollection Cookies  
            {  
                get { return this.oCookies; }  
                set { this.oCookies = value; }  
            }  
      
            //默认的编码  
            public string MyEncoding  
            {  
                get { return this.cEncoding; }  
                set { this.cEncoding = value; }  
            }  
      
            //自动跳转到新的页面  
            public bool Location  
            {  
                get { return this.bLocation; }  
                set { this.bLocation = value; }  
            }  
            // *** member properties  
            string cPostData = ""; //提交的数据  
            int nConnectTimeout = 180; //超时  
            string cUserAgent = " Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 1.1.4322)"; //用户代理  
            bool bHandleReferer = true; //自动操作引用页  
            string cReferer = ""; //引用页  
            string cMethod = "POST"; //提交模式POST ro GET  
            string cUsername = "";  
            string cPassword = "";  
            string cProxyAddress = "";  
            string cProxyBypass = "";  
            string cProxyUsername = "";  
            string cProxyPassword = "";  
            bool bThrowExceptions = true; //是否抛出异常  
            bool bHandleCookies = true; //自动操作Cookies  
            CookieCollection oCookies;  
            string cErrorMsg = ""; //错误返回  
            bool bError = false;  
            string cEncoding = "GB2312";//UTF-8 GB2312  
            bool bLocation = false;  
      
            public MyHttp() { }  
      
            /// <summary>  
            /// 增加提交的值  
            /// </summary>  
            /// <param name="Key"></param>  
            /// <param name="Value"></param>  
            public void AddPostKey(string Key, string Value)  
            {  
                cPostData += Key + "=" + System.Web.HttpUtility.UrlEncode(Value, System.Text.Encoding.GetEncoding("GB2312")) + "&";  
            }  
      
            /// <summary>  
            /// 增加提交的连续值(完整或者部分完整值)  
            /// </summary>  
            /// <param name="FullPostBuffer"></param>  
            public void AddPostKey(string FullPostBuffer)  
            {  
                cPostData += FullPostBuffer;  
            }  
      
      
      
      
      
            public string GetUrl(string Url)  
            {  
                Url = UrlEncode(Url);  
                Debug.WriteLine(Url);  
                try  
                {  
                    this.bError = false;  
                    this.cErrorMsg = "";  
      
                    //通用的属性  
                    HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(Url);  
                    Request.UserAgent = this.cUserAgent;  
                    Request.Timeout = this.nConnectTimeout * 1000;  
                    Request.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*";  
                    Request.Referer = this.cReferer;  
                    //Request.Connection = "keep-alive";  
      
                    // 需要安全验证的访问  
                    if (this.cUsername.Length > 0)  
                    {  
                        if (this.cUsername == "AUTOLOGIN")  
                            Request.Credentials = CredentialCache.DefaultCredentials;  
                        else  
                            Request.Credentials = new NetworkCredential(this.cUsername, this.cPassword);  
                    }  
      
                    // 需要使用Proxy和其配置  
                    if (this.cProxyAddress.Length > 0)  
                    {  
                        if (this.cProxyAddress == "DEFAULTPROXY")  
                        {  
                            Request.Proxy = new WebProxy();  
                            Request.Proxy = WebProxy.GetDefaultProxy();  
                        }  
                        else  
                        {  
                            WebProxy loProxy = new WebProxy(this.cProxyAddress, true);  
                            if (this.cProxyBypass.Length > 0)  
                            {  
                                loProxy.BypassList = this.cProxyBypass.Split(';');  
                            }  
      
                            if (this.cProxyUsername.Length > 0)  
                                loProxy.Credentials = new NetworkCredential(this.cProxyUsername, this.cProxyPassword);  
      
                            Request.Proxy = loProxy;  
                        }  
                    }  
      
                    // 需要操作Cookies和自动重用Cookies  
                    if (this.bHandleCookies)  
                    {  
                        Request.CookieContainer = new CookieContainer();  
                        if (this.oCookies != null && this.oCookies.Count > 0)  
                        {  
                            Request.CookieContainer.Add(this.oCookies);  
                        }  
                    }  
      
                    Request.Method = cMethod;//设置提交模式  
      
                    if (this.cMethod == "POST")  
                    {  
                        Request.ContentType = "application/x-www-form-urlencoded";  
                        if (this.cPostData.EndsWith("&"))  
                            this.cPostData = this.cPostData.Substring(0, this.cPostData.Length - 1);  
      
                        //MessageBox.Show(this.cPostData);  
      
                        byte[] lbPostBuffer = System.Text.Encoding.GetEncoding(cEncoding).GetBytes(cPostData);  
                        Request.ContentLength = lbPostBuffer.Length;  
                        Stream loPostData = Request.GetRequestStream();  
      
                        loPostData.Write(lbPostBuffer, 0, lbPostBuffer.Length);  
                        loPostData.Close();  
      
                        // *** clear the POST buffer  
                        this.cPostData = "";  
                    }  
      
                    // *** Retrieve the response headers   
                    HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();  
      
                    // ** Save cookies the server sends  
                    if (this.bHandleCookies)  
                    {  
                        if (Response.Cookies.Count > 0)  
                        {  
                            if (this.oCookies == null)  
                            {  
                                this.oCookies = Response.Cookies;  
                            }  
                            else  
                            {  
                                // ** If we already have cookies update the list  
                                foreach (Cookie oRespCookie in Response.Cookies)  
                                {  
                                    bool bMatch = false;  
                                    foreach (Cookie oReqCookie in this.oCookies)  
                                    {  
                                        if (oReqCookie.Name == oRespCookie.Name)  
                                        {  
                                            oReqCookie.Value = oRespCookie.Value;  
                                            bMatch = true;  
                                            break; //   
                                        }  
                                    } // for each ReqCookies  
                                    if (!bMatch)  
                                        this.oCookies.Add(oRespCookie);  
                                } // for each Response.Cookies  
                            } // this.Cookies == null  
                        } // if Response.Cookie.Count > 0  
                    } // if this.bHandleCookies = 0  
      
                    // *** Save the response object for external access  
                    Encoding enc;  
                    try  
                    {  
                        if (Response.ContentEncoding.Length > 0)  
                            enc = Encoding.GetEncoding(Response.ContentEncoding);  
                        else  
                            enc = Encoding.GetEncoding(cEncoding);  
                    }  
                    catch  
                    {  
                        // *** Invalid encoding passed  
                        enc = Encoding.GetEncoding(cEncoding);  
                    }  
      
                    // *** drag to a stream  
                    StreamReader strResponse = new StreamReader(Response.GetResponseStream(), enc);  
                    string str = strResponse.ReadToEnd();  
                    Response.Close();  
                    strResponse.Close();  
                    //自动跟踪引用页  
                    if (this.bHandleReferer)  
                    {  
                        this.cReferer = Url;  
                    }  
                    //自动处理HTTP/1.0 302 Moved Temporarily中的Location后的页面。(自动完成跳转)  
                    if (this.bLocation)  
                    {  
      
                        //这里需要自动获得跳转页面的地址。并且再次使用这个方法访问页面  
                    }  
                    return str;  
                }  
                catch (Exception e)  
                {  
                    if (this.bThrowExceptions)  
                        throw e;  
                    this.cErrorMsg = e.Message;  
                    this.bError = true;  
                    return null;  
                }  
            }  
            private string UrlEncode(string url)  
            {  
                byte[] bs = Encoding.GetEncoding("gb2312").GetBytes(url);  
                StringBuilder sb = new StringBuilder();  
                for (int i = 0; i < bs.Length; i++)  
                {  
                    if (bs[i] < 128)  
                        sb.Append((char)bs[i]);  
                    else  
                    {  
                        sb.Append("%" + bs[i++].ToString("x").PadLeft(2, '0'));  
                        sb.Append("%" + bs[i].ToString("x").PadLeft(2, '0'));  
                    }  
                }  
                return sb.ToString();  
            }  
      
        }  
    }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值