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); }
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); }
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; }
public WebResponseEventArgs(HttpWebRequest request, WebRequestParameter parameter, int tryIndex, HttpWebResponse response) : base(request, parameter, tryIndex) { this.Response = response; }