2016-04-30 3 views
0

Здравствуйте, у меня возник вопрос о вызове прокси из текстового поля в C# webclient. Прямо сейчас я могу получить случайный следующий прокси из текстового поля, но я бы хотел назвать второй прокси каждый раз, когда я сделал запрос вместо случайного.Хо, я вызываю следующий прокси из текстового поля вместо случайного следующего?

код я использую сейчас:

readonly List<string> proxies = new List<string>(); 

WebProxy RandomProxy 
    { 
     get 
     { 
      return proxies.Count == 0 ? 
       null : 
       new WebProxy(proxies[rnd.Next(proxies.Count)]); 

     } 
    } 

proxies.Clear(); 
proxies.AddRange(txtProxy.Lines.Where(p => !String.IsNullOrWhiteSpace(p))); 

var proxy = RandomProxy; 
var wc = new WebClient { Proxy = proxy }; 

После анализа запроса я заметил, что прокси меняются, но не так, как я хотел бы иметь доверенных лиц, называемых. Поэтому каждый запрос использует следующий прокси из текстового поля.

Любой, кто мог бы объяснить мне, как это изменить? Спасибо заранее. С уважением, Dennis

+0

Итак, вы хотите, чтобы каждый раз вызывал случайный прокси-сервер, исключая уже вызванный? – MaKCbIMKo

+0

Да, это то, что я пытаюсь достичь @MaKCbIMKo. Сейчас он вызывает случайные прокси из списка. – user1796805

ответ

1

Это то, что вы хотите?

// queue to get proxies in order started with random index 
private Queue<string> sortedProxies; 

WebProxy NextProxy 
{ 
    get 
    { 
     if (sortedProxies == null) 
     { 
      var proxyCount = proxies.Count; 
      var randomIndex = rnd.Next(proxyCount); 
      // get proxies from random index to the end of the list 
      var sortedProxyList = proxies.GetRange(randomIndex, proxyCount -randomIndex); 
      // add proxies from start to the random index ('loop' for all proxies 
      sortedProxyList.AddRange(proxies.GetRange(0, randomIndex)); 


      sortedProxies = new Queue<string>(sortedProxyList); 
     } 

     // dequeue the next proxy 
     var proxy = sortedProxies.Dequeue(); 
     // enqueue proxy again for infinity loop 
     sortedProxies.Enqueue(proxy); 

     return new WebProxy(proxy); 
    } 
} 
+0

Привет, спасибо за скрипт, но когда я его анализирую, я запускаю его в цикле. Из 10 прокси он заканчивает использование 1 прокси после запуска webclient. Я попытался удалить ваши прокси. Исправлено. Чтобы просто проверить, вызываются ли прокси каждый раз, когда новый прокси из следующей строки из текстового поля, но его вызов также случайные прокси. Можно ли вызвать следующий прокси? вместо случайных. Прошу прощения за длинный вопрос и надеюсь, что я не буду вас беспокоить. Я очень ценю вашу помощь. – user1796805

+0

Итак, вам нужно просто случайное выбрать первый, а затем вам нужно перейти от этого индекса по возрастанию? – MaKCbIMKo

+0

Да, если это возможно сделать, выберите первый и после каждого запроса получите следующий и так один для каждого другого запроса. – user1796805