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;

            }

        }

    }

 

你可能感兴趣的:(http)