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; } _proxyQueue.Add(p); }