if (project.Variables["TurnProxy"].Value == "True" )
{
// проверяем включены-ли прокси или нет.
IZennoList proxyList = project.Lists["Proxy"]; //Получаем указатель на лист с проксями
int count = 100; // количество неудачных проверок подряд
string protocol = "";
if (project.Variables["Protocol"].Value == "") //(пустая переменная = http://)
project.Variables["Protocol"].Value = "http";
protocol = project.Variables["Protocol"].Value + "://"; // из переменной, в переменной значение socks5:// или http:// (пустая переменная = http://)
for (int i = 0; i < count; i++)
{
if (proxyList.Count == 0)
break;
string proxy = string.Empty;
lock (SyncObjects.ListSyncer)
{
proxy = proxyList[0];
proxyList.RemoveAt(0);
}
var content = ZennoPoster.HttpGet(project.Variables["CHECK_ADRESS"].Value, // CHECK_ADRESS - url для проверки
protocol + proxy,
"UTF-8",
ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
15000);
project.Variables["debug"].Value = content;
if (!Regex.Match(content, "^$|/blocked|заблокирован|407 Proxy").Success)
// ""- если ответ пустой, && - или, содержит blocked в заголовках или ответе, то прокси не подходит
{
lock (SyncObjects.ListSyncer)
{
proxyList.Add(proxy); // записываем живую проксю в конец списка*
}
instance.SetProxy(protocol + proxy); // назначаем прокси в проект
project.Variables["proxy"].Value = protocol + proxy; // назначем прокси в переменную
return proxy; // возвращаем в ответе снипета прокси
}
lock (SyncObjects.ListSyncer)
{
// proxyList.Add(proxy); // записываем проксю в конец списка в любом случае (предыдущее за комментировать!)*
}
project.SendWarningToLog(proxy+" Прокся плохая,чекаю ещё!"); // если прокся плохая пишем,что она плохая.
}
throw new Exception("Плохие прокси!");//Если израсходовали все попытки подключения , то выходим из блока c# с таким сообщением.
}