HttpHelper_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > HttpHelper

HttpHelper

 2014/9/3 11:41:57  小川丶  程序员俱乐部  我要评论(0)
  • 摘要:publicclassHttpHelper{privatestaticCookieContainer_cc=newCookieContainer();privatestaticWebProxy_proxy;privatestaticint_delayTime;privatestaticint_timeout=120000;//Thedefaultis120000milliseconds(120seconds).privatestaticint_tryTimes=3
  • 标签:HTTP
 public class HttpHelper {

        private static CookieContainer _cc = new CookieContainer();
        private static WebProxy _proxy;
        private static int _delayTime;
        private static int _timeout = 120000; // The default is 120000 milliseconds (120 seconds).
        private static int _tryTimes = 3; // 默认重试3次
        private static string _lastUrl = string.Empty;
        private static string reqUserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2)";




        // 无 referer 的 Get
        public static string Get(string url) {
            string data = Get(url, _lastUrl);
            _lastUrl = url;
            return data;
        }

        /// <summary>
        /// Get data from server
        /// </summary>
        /// <param name="url"></param>
        /// <returns>Return content</returns>
        public static string Get(string url, string referer)
        {
            int failedTimes = _tryTimes;
            while (failedTimes-- > 0) {
                try {
                    DelaySomeTime();

                    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri(url));
                    req.UserAgent = reqUserAgent;
                    req.CookieContainer = _cc;
                    req.Referer = referer;

                    req.Method = "GET";
                    req.Timeout = _timeout;
                    if (null != _proxy && null != _proxy.Credentials) {
                        req.UseDefaultCredentials = true;
                    }
                    req.Proxy = _proxy;
                    

                    //接收返回字串
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                    StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                    return sr.ReadToEnd();
                } catch (Exception e) {
                    //TraceLog.Error("HTTP GET Error: " + e.Message);
                    //TraceLog.Error("Url: " + url);
                }
            }

            return string.Empty;
        }

        public static void Download(string url, string localfile)
        {
            WebClient client = new WebClient();
            client.DownloadFile(url, localfile);
        }

        private static void DelaySomeTime()
        {
            if (_delayTime > 0) {
                Random rd = new Random();
                int delayTime = _delayTime * 1000 + rd.Next(1000);
                Thread.Sleep(delayTime);
            }
        }

        /// <summary>
        /// Set Proxy
        /// </summary>
        /// <param name="server"></param>
        /// <param name="port"></param>
        public static void SetProxy(string server, int port, string username, string password)
        {
            if (null != server && port > 0) {
                _proxy = new WebProxy(server, port);
                if (null != username && null != password) {
                    _proxy.Credentials = new NetworkCredential(username, password);
                    _proxy.BypassProxyOnLocal = true;
                }
            }
        }

        /// <summary>
        /// Set delay connect time
        /// </summary>
        /// <param name="delayTime"></param>
        public static void SetDelayConnect(int delayTime)
        {
            _delayTime = delayTime;
        }

        /// <summary>
        /// Set the timeout for each http request
        /// </summary>
        /// <param name="timeout"></param>
        public static void SetTimeOut(int timeout)
        {
            if (timeout > 0) {
                _timeout = timeout;
            }
        }

        /// <summary>
        /// Set the try times for each http request
        /// </summary>
        /// <param name="times"></param>
        public static void SetTryTimes(int times)
        {
            if (times > 0) {
                _tryTimes = times;
            }
        }
    }

 

发表评论
用户名: 匿名