HttpHelper

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

 

posted @ 2014-09-03 10:09  小川丶  阅读(612)  评论(0编辑  收藏  举报