Ejemplo n.º 1
0
        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);
        }