public bool IsAvailable(UseSpecifiedUriWebProxy proxy) { var timeout = TimeSpan.FromSeconds(1d); var validator = new ProxyValidator(proxy); var targetAddress = new Uri(this._targetUrl); return(validator.Validate(targetAddress, timeout) == HttpStatusCode.OK); }
/// <summary> /// 把代理返回给代理池 /// </summary> /// <param name="proxy">代理</param> /// <param name="statusCode">通过此代理请求数据后的返回状态</param> public void ReturnProxy(UseSpecifiedUriWebProxy proxy, HttpStatusCode statusCode) { if (proxy == null) { return; } var key = $"{proxy.Uri.Host}:{proxy.Uri.Port}"; if (!_allProxy.ContainsKey(key)) { return; } Proxy p = _allProxy[key]; switch (statusCode) { case HttpStatusCode.OK: p.SetFailedNum(0); p.SetReuseTime(_reuseInterval); p.RecordResponse(); break; case HttpStatusCode.Forbidden: p.Fail(); p.SetReuseTime(_reuseInterval * p.FailedNum); break; case HttpStatusCode.NotFound: p.Fail(); p.SetReuseTime(_reuseInterval * p.FailedNum); break; default: p.Fail(); p.SetReuseTime(_reuseInterval * p.FailedNum); break; } if (p.FailedNum > 20) { return; } if (ProxyValidator != null && p.FailedNum % 3 == 0 && ProxyValidator.IsAvailable(proxy)) { return; } lock (_locker) { _proxyQueue.Add(p); } }
public void ReturnProxy(UseSpecifiedUriWebProxy host, HttpStatusCode statusCode) { if (host == null) { return; } var key = $"{host.Uri.Host}:{host.Uri.Port}"; if (!_allProxy.ContainsKey(key)) { return; } Proxy p = _allProxy[key]; switch (statusCode) { case HttpStatusCode.OK: p.SetFailedNum(0); p.SetReuseTime(_reuseInterval); p.RecordResponse(); break; case HttpStatusCode.Forbidden: p.Fail(); p.SetReuseTime(_reuseInterval * p.FailedNum); break; case HttpStatusCode.NotFound: p.Fail(); p.SetReuseTime(_reuseInterval * p.FailedNum); break; default: p.Fail(); p.SetReuseTime(_reuseInterval * p.FailedNum); break; } if (p.FailedNum > 20) { return; } if (p.FailedNum % 3 == 0 && !ProxyUtil.ValidateProxy(p.HttpHost.Uri.Host, p.HttpHost.Uri.Port)) { return; } lock (this) { _proxyQueue.Add(p); } }
public bool IsAvailable(UseSpecifiedUriWebProxy proxy) { var userName = default(string); var password = default(string); if (proxy.Credentials != null) { var credentials = proxy.Credentials.GetCredential(null, null); userName = credentials?.UserName; password = credentials?.Password; } var targetUri = new Uri(_targetUrl); var status = ProxyValidate.Validate(proxy.Uri.Host, proxy.Uri.Port, userName, password, targetUri); return(status == HttpStatusCode.OK); }
public Proxy(UseSpecifiedUriWebProxy httpHost, int reuseTimeInterval = 1500) { HttpHost = httpHost; CanReuseTime = DateTimeUtils.GetCurrentTimeStamp() + reuseTimeInterval * 100; }
public SingleProxyPool(UseSpecifiedUriWebProxy proxy) { _proxy = proxy; }
public void ReturnProxy(UseSpecifiedUriWebProxy host, HttpStatusCode statusCode) { }
/// <summary> /// 构造方法 /// </summary> /// <param name="url">HTTP代理的链接</param> public SingleProxyPool(string url) { _proxy = new UseSpecifiedUriWebProxy(new System.Uri(url)); }
/// <summary> /// 构造方法 /// </summary> /// <param name="proxy">实际代理信息</param> /// <param name="reuseTimeInterval">代理不被再次使用的间隔</param> public Proxy(UseSpecifiedUriWebProxy proxy, int reuseTimeInterval = 1500) { WebProxy = proxy; CanReuseTime = DateTimeUtil.GetCurrentUnixTimeNumber() + reuseTimeInterval * 100; }