Пример #1
0
        protected virtual HttpWebResponse RequestInTry(WebRequestParameter parameter, int tryIndex, CancellationToken?cancelToken = null)
        {
            Exception innerException = null;

            try
            {
                var request = this.CreateRequest(parameter);
                this.WriteReuqestParameter(request, parameter.WriteParameter);

                this.OnRequesting(new WebRequestEventArgs(request, parameter, tryIndex));

                HttpWebResponse response = null;

                try
                {
                    cancelToken?.Register(() => request.Abort());
                    response = (HttpWebResponse)request.GetResponse();
                }
                catch (WebException e)
                {
                    innerException = e;
                    response       = (HttpWebResponse)e.Response;
                }

                if (response != null)
                {
                    this.Cookies.Add(response.Cookies);

                    try
                    {
                        this.OnResponsed(new WebResponseEventArgs(request, parameter, tryIndex, response));
                        return(response);
                    }
                    catch (Exception e)
                    {
                        innerException = e;
                        ObjectUtils.DisposeQuietly(response);
                    }
                }
            }
            catch (Exception e)
            {
                innerException = e;
            }

            throw new WebNetworkException("", innerException);
        }
Пример #2
0
        public virtual HttpWebResponse Request(WebRequestParameter parameter, CancellationTokenSource cancelTokenSource = null)
        {
            Exception lastException = null;

            for (int i = 0; i < parameter.RetryCount + 1; i++)
            {
                try
                {
                    var token = cancelTokenSource?.Token;
                    return(this.RequestInTry(parameter, i, token));
                }
                catch (Exception e)
                {
                    lastException = e;
                }
            }

            throw new WebNetworkException("", lastException);
        }
Пример #3
0
        public virtual HttpWebRequest CreateRequest(WebRequestParameter parameter)
        {
            var uri     = new Uri(parameter.Uri);
            var request = (HttpWebRequest)WebRequest.Create(uri);

            var headers = request.Headers;

            request.Credentials        = parameter.Credentials;
            request.Method             = parameter.Method;
            request.ProtocolVersion    = parameter.ProtocolVersion;
            request.Host               = uri.Host;
            request.KeepAlive          = parameter.KeepAlive;
            headers["Cache-Control"]   = parameter.CacheControl;
            request.UserAgent          = parameter.UserAgent;
            request.Accept             = parameter.Accept;
            headers["DNT"]             = parameter.DNT;
            headers["Accept-Language"] = parameter.AcceptLanguage;

            if (parameter.ContentType != null)
            {
                request.ContentType = parameter.ContentType;
            }

            foreach (var pair in parameter.Headers)
            {
                headers[pair.Key] = pair.Value;
            }

            var cookies = new CookieContainer();

            cookies.Add(this.Cookies.GetCookies(uri));

            if (parameter.CookieContainer != null)
            {
                cookies.Add(parameter.CookieContainer.GetCookies(uri));
            }

            if (parameter.Referer != null)
            {
                request.Referer = parameter.Referer;
            }

            request.CookieContainer   = cookies;
            request.AllowAutoRedirect = parameter.AllowAutoRedirect;

            var proxy = parameter.Proxy;

            if (proxy != null)
            {
                var proxyImpl = new WebProxy(proxy.Hostname, proxy.Port)
                {
                    BypassProxyOnLocal = false
                };
                request.Proxy = proxyImpl;
            }

            int timeout = parameter.Timeout;

            request.ReadWriteTimeout = timeout;
            request.Timeout          = timeout;
            request.ContinueTimeout  = timeout;

            return(request);
        }
 public WebRequestEventArgs(HttpWebRequest request, WebRequestParameter parameter, int tryIndex)
 {
     this.Request   = request;
     this.Parameter = parameter;
     this.TryIndex  = tryIndex;
 }
Пример #5
0
 public WebResponseEventArgs(HttpWebRequest request, WebRequestParameter parameter, int tryIndex, HttpWebResponse response) : base(request, parameter, tryIndex)
 {
     this.Response = response;
 }