Прокси взять из списка, чекнуть, назначить, положить в конец списка. Готовый сниппет. Proxy С#

Статус
Закрыто для дальнейших ответов.

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Тут новая версия

Тут
родился сниппет =)

Выражаю благодарность @nole @samsonnn @Dimionix за активное участие при его создании.

C#:
IZennoList proxyList = project.Lists["Proxy"];
int count = 10; // количество неудачных проверок подряд
//int count = proxyList.Count; // если строки берутся с удалением БЕЗ записи в конец списка (проверяем до талого, так сказать)
string protocol = project.Variables["Protocol"].Value; // из переменной, в переменной значение socks5:// или http:// (пустая переменная = http://)
lock (SyncObjects.ListSyncer) {
  for (int i = 0; i < count; i++) {
  if (proxyList.Count == 0) break;
  string proxy = proxyList[0];
  proxyList.RemoveAt(0);

  var content = ZennoPoster.HttpGet("http://chek.zennolab.com/", protocol + proxy);
  if (content.Contains(Regex.Match(proxy, @"(\d{1,3}\.){3}\d{1,3}").Value)) {
  proxyList.Add(proxy); // записываем живую проксю в конец списка
  instance.SetProxy(protocol + proxy);
  return proxy;
  }
//  proxyList.Add(proxy); // записываем проксю в конец списка в любом случае (предыдущее закомментировать!)
  }
  throw new Exception("Ошибка!");
}
Краткое описание сниппета.

Берет строку прокси из списка, проверяет его, если все нормально назначает и на выбор: кладет в конец списка живую прокси (по умолчанию), кладет в конец списка любую прокси, не кладет в конец списка. (см. подробное описание 3 ,13 ,17 строка). Если прокси не активна, то берет следующую до тех пор пока не найдет рабочую или кол-во неудачных проверок превысит установленный лимит (см. подробное описание 2 строка)


Подробное описание сниппета по строкам.


1. Proxy - это название списка с прокси (регистрозависимо).

2. 10 - кол-во неудачных проверок подряд.
3. Брать строки с удалением без записи в конец списка (13 и 17 сторки должны быть закоментированны).
4. Protocol - это название перменной в прокете(регистрозависимо), которая ответсвенна за протокол должна принимать значения "socks5://" или "http://" без кавычек
5. Лочим код.
6. Цикл.
7. Выход из цикла, если список пуст и завершение ошибкой.
8. Берем первую строку из списка и назначаем прокси в переменную для запроса.
9. Удаляем строку из списка.

11. GET-запрос на сайт http://chek.zennolab.com/

12. Проверка (чек) прокси.
13. Запись рабочей прокси в конец списка (3 и 17 стоки должны быть закоментированны).
14. Назначаем прокси в проекте.
15. Возвращаем прокси (IP будет в переменной снипета).

17. Записывать все прокси в конец списка (3 и 13 строки должны быть закоментированны).


19. Вывод в лог сообшения "Ошибка" при неудачном выполнении сниппета.
 
Последнее редактирование:

Sergeevich68

Client
Регистрация
10.06.2016
Сообщения
50
Благодарностей
25
Баллы
18
Спасибо за сниппет ,но я слегка не понимаю. в 14 строке прописываю
HTML:
instance.SetProxy(protocol + proxy);
Из этого кода видно как получается у меня перемменая
Код:
string protocol = project.Variables["Protocol"].Value+"://"
В итогу в PM и ZM получаю такую картину

Но если в 14 строке пишут так
Код:
 instance.SetProxy( proxy);
, то получается всё гуд .

Вопрос: Это я где-то напортачил с переменными или же это недочет сниппета ?
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 228
Благодарностей
784
Баллы
113

Alexander I

Client
Регистрация
04.11.2016
Сообщения
32
Благодарностей
3
Баллы
8
Не советую. Сервера бывают у них перегружены и в место ip выдает какую то муть. Т.е. proxy по факту рабочая, а ваш чекер покажет что нет
А что посоветуете для проверки? Дело еще в том, что я использую backconnect прокси и после проверки еще и сохраняю какой мне дали реальный прокси для конкретного гейта в этот раз (они меняются через 10 минут). То есть, нужно решение, что не просто покажет работает прокси или нет, но еще и даст возможность выдернуть проверочным get запросом еще и сам прокси адрес.
Заранее спасибо за помощь!
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 228
Благодарностей
784
Баллы
113
А что посоветуете для проверки? Дело еще в том, что я использую backconnect прокси и после проверки еще и сохраняю какой мне дали реальный прокси для конкретного гейта в этот раз (они меняются через 10 минут). То есть, нужно решение, что не просто покажет работает прокси или нет, но еще и даст возможность выдернуть проверочным get запросом еще и сам прокси адрес.
Заранее спасибо за помощь!
Чтоб ip получить - https://api.ipify.org
Если просто чекнуть - https://google.com - эт надежный))
 
  • Спасибо
Реакции: Alexander I

Alexander I

Client
Регистрация
04.11.2016
Сообщения
32
Благодарностей
3
Баллы
8

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Вопрос: Это я где-то напортачил с переменными или же это недочет сниппета ?
Возможно недочет, сейчас на отдыхе, не могу проверить. Если можете выложить рабочий вариант, сделайте это пожалуйста.
Я сам C# понимаю очень поверхностно, ребята помогали сделать универсальный сниппет, но это не значит, что его не нужно развивать. Если есть интересные идеи по его улучшению, делайте пожалуйста и выкладывайте.
 
  • Спасибо
Реакции: Sergeevich68

Sergeevich68

Client
Регистрация
10.06.2016
Сообщения
50
Благодарностей
25
Баллы
18
Возможно недочет, сейчас на отдыхе, не могу проверить. Если можете выложить рабочий вариант, сделайте это пожалуйста.
Я сам C# понимаю очень поверхностно, ребята помогали сделать универсальный сниппет, но это не значит, что его не нужно развивать. Если есть интересные идеи по его улучшению, делайте пожалуйста и выкладывайте.
Подправил проверку на валидность , все инструкции ТС от первого поста так же подходят и для этого сниппета.
C#:
IZennoList proxyList = project.Lists["Proxy"];
    project.SendErrorToLog("Прокси включены!!");
//int count = 10; // количество неудачных проверок подряд
int count = proxyList.Count; // если строки берутся с удалением БЕЗ записи в конец списка (проверяем до талого, так сказать)
string protocol = project.Variables["Protocol"].Value+"://"; // из переменной, в переменной значение socks5:// или http:// (пустая переменная = http://)
lock (SyncObjects.ListSyncer) {
  for (int i = 0; i < count; i++) {
  if (proxyList.Count == 0) break;
  string proxy = proxyList[0];
  proxyList.RemoveAt(0);
  var content = ZennoPoster.HttpGet("https://www.google.ru/?q=sda", protocol + proxy);
if (content.ToString().Length == 0 || (content.ToString().Substring(8,3) == "502")) {
  //proxyList.Add(proxy); // записываем живую проксю в конец списка
  instance.SetProxy(proxy);
  return proxy;
  }
//  proxyList.Add(proxy); // записываем проксю в конец списка в любом случае (предыдущее закомментировать!)
project.SendErrorToLog("Прокся плохая,чекаю ещё!");
}
  throw new Exception("Ошибка!");
}
}
 
  • Спасибо
Реакции: one, GreenWay и Mikhail B.

vitashok

Client
Регистрация
20.11.2015
Сообщения
84
Благодарностей
13
Баллы
8
А если прокси в переменной, а не в списке, что поменять нужно?
Проксю проверить на работает или нет.
 

vitashok

Client
Регистрация
20.11.2015
Сообщения
84
Благодарностей
13
Баллы
8
А как сделать просто проверку прокси на валидность?
Да и еще прокси могут быть и соксы и хттп
 

Sergeevich68

Client
Регистрация
10.06.2016
Сообщения
50
Благодарностей
25
Баллы
18
А если прокси в переменной, а не в списке, что поменять нужно?
Проксю проверить на работает или нет.
Много строк нужно комментировать,поэтому мне проще вам скинуть так код)

C#:
string protocol = " http://"; // Здесь задается тип прокси. в  socks5:// или http:// (пустая переменная = http://)
string proxy = " 123 123 13 21";// здесь ваша прокси
var content = ZennoPoster.HttpGet("https://www.google.ru/?q=sda", protocol + proxy);
if (content.ToString().Length >= 50) {

instance.SetProxy(proxy);// ставим прокси для браузера
project.SendInfoToLog("Прокся гуд");


  }
else {
     project.SendErrorToLog("Прокся плохая");
}
 
Последнее редактирование:
  • Спасибо
Реакции: vitashok

Sergeevich68

Client
Регистрация
10.06.2016
Сообщения
50
Благодарностей
25
Баллы
18
Подправил проверку на валидность , все инструкции ТС от первого поста так же подходят и для этого сниппета.
Исправил сниппет!
C#:
IZennoList proxyList = project.Lists["Proxy"];
    project.SendErrorToLog("Прокси включены!!");
//int count = 10; // количество неудачных проверок подряд
int count = proxyList.Count; // если строки берутся с удалением БЕЗ записи в конец списка (проверяем до талого, так сказать)
string protocol = project.Variables["Protocol"].Value+"://"; // из переменной, в переменной значение socks5:// или http:// (пустая переменная = http://)
lock (SyncObjects.ListSyncer) {
  for (int i = 0; i < count; i++) {
  if (proxyList.Count == 0) break;
  string proxy = proxyList[0];
  proxyList.RemoveAt(0);
  var content = ZennoPoster.HttpGet("https://www.google.ru/?q=sda", protocol + proxy);
if (content.ToString().Length >=52)) {
  //proxyList.Add(proxy); // записываем живую проксю в конец списка
  instance.SetProxy(proxy);
  return proxy;
  }
//  proxyList.Add(proxy); // записываем проксю в конец списка в любом случае (предыдущее закомментировать!)
project.SendErrorToLog("Прокся плохая,чекаю ещё!");
}
  throw new Exception("Ошибка!");
}
}
 

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
186
Баллы
43
Подправил проверку на валидность , все инструкции ТС от первого поста так же подходят и для этого сниппета.
Исправил сниппет!
C#:
IZennoList proxyList = project.Lists["Proxy"];
    project.SendErrorToLog("Прокси включены!!");
//int count = 10; // количество неудачных проверок подряд
int count = proxyList.Count; // если строки берутся с удалением БЕЗ записи в конец списка (проверяем до талого, так сказать)
string protocol = project.Variables["Protocol"].Value+"://"; // из переменной, в переменной значение socks5:// или http:// (пустая переменная = http://)
lock (SyncObjects.ListSyncer) {
  for (int i = 0; i < count; i++) {
  if (proxyList.Count == 0) break;
  string proxy = proxyList[0];
  proxyList.RemoveAt(0);
  var content = ZennoPoster.HttpGet("https://www.google.ru/?q=sda", protocol + proxy);
if (content.ToString().Length >=52)) {
  //proxyList.Add(proxy); // записываем живую проксю в конец списка
  instance.SetProxy(proxy);
  return proxy;
  }
//  proxyList.Add(proxy); // записываем проксю в конец списка в любом случае (предыдущее закомментировать!)
project.SendErrorToLog("Прокся плохая,чекаю ещё!");
}
  throw new Exception("Ошибка!");
}
}
Подскажите, значения переменных для протокола какие доступны для установки?
socks5:// , http:// - понятно, а socks4:// и https:// ? И есть ли разница между http и https?
upd.
и попутный вопрос - если сокс прокси - то в самом же файле тоже надо будет уточнить протокол прокси или хватит того, что в переменной задали протокол?
 
Последнее редактирование:
  • Спасибо
Реакции: Sergeevich68

Sergeevich68

Client
Регистрация
10.06.2016
Сообщения
50
Благодарностей
25
Баллы
18
Подскажите, значения переменных для протокола какие доступны для установки?
socks5:// , http:// - понятно, а socks4:// и https:// ? И есть ли разница между http и https?
В переменную вы можете задать любой тип(протокол) прокси.
Разница между http и https несущественная . https - тоже самое,что http , но дело в том ,что https используют для передачи данных защищенные протоколы SSL/TLS . Если честно, то я не заметил никакой разницы при работе с этими типами проксями.
и попутный вопрос - если сокс прокси - то в самом же файле тоже надо будет уточнить протокол прокси или хватит того, что в переменной задали протокол?
Достаточно указать в переменной тип прокси.
 
  • Спасибо
Реакции: Mikhail B. и kapelan28

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Подправил проверку на валидность , все инструкции ТС от первого поста так же подходят и для этого сниппета.
Исправил сниппет!
C#:
IZennoList proxyList = project.Lists["Proxy"];
    project.SendErrorToLog("Прокси включены!!");
//int count = 10; // количество неудачных проверок подряд
int count = proxyList.Count; // если строки берутся с удалением БЕЗ записи в конец списка (проверяем до талого, так сказать)
string protocol = project.Variables["Protocol"].Value+"://"; // из переменной, в переменной значение socks5:// или http:// (пустая переменная = http://)
lock (SyncObjects.ListSyncer) {
  for (int i = 0; i < count; i++) {
  if (proxyList.Count == 0) break;
  string proxy = proxyList[0];
  proxyList.RemoveAt(0);
  var content = ZennoPoster.HttpGet("https://www.google.ru/?q=sda", protocol + proxy);
if (content.ToString().Length >=52)) {
  //proxyList.Add(proxy); // записываем живую проксю в конец списка
  instance.SetProxy(proxy);
  return proxy;
  }
//  proxyList.Add(proxy); // записываем проксю в конец списка в любом случае (предыдущее закомментировать!)
project.SendErrorToLog("Прокся плохая,чекаю ещё!");
}
  throw new Exception("Ошибка!");
}
}
В коде две ошибки. 11я строка, лишняя скобка и 22 строка не нужна.

И какой то не нормальный глюк. Устанавливает прокси, по логу трафика видно, что гугл отдал код 200, но прокси мертвый.
 
Последнее редактирование:

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Так... Погонял я данный снипет из первого поста. В нем как бы учтена работа много потока, но почему то потоки хватают один и тот же прокси. Надо подправить, но что?
 

bzbro

Client
Регистрация
15.05.2016
Сообщения
59
Благодарностей
0
Баллы
6
В коде две ошибки. 11я строка, лишняя скобка и 22 строка не нужна.

И какой то не нормальный глюк. Устанавливает прокси, по логу трафика видно, что гугл отдал код 200, но прокси мертвый.
А можете скинуть сюда правильный код? А то не запускается. Спасибо заранее.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Прошу прощения. Я шарпе не очень разбираюсь.
 

Sergeevich68

Client
Регистрация
10.06.2016
Сообщения
50
Благодарностей
25
Баллы
18
В коде две ошибки. 11я строка,
.
Где же там ошибка?
лишняя скобка и 22 строка не нужна.
По поводу лишней скобки , я её упустил из виду так как у меня ещё стоит условие перед этой проверкой .
У меня сниппет выглядит так

C#:
if (project.Variables["TurnProxy"].Value=="true" )  { // проверяем включены-ли прокси или нет.
IZennoList proxyList = project.Lists["Proxy"]; //Парсим все прокси из листа зенки в лист данного C# кубика.
    //project.SendInfoToLog("Прокси включены!!");   лучше убрать т.к засоряет весь лог.
int count =100; // количество неудачных проверок подряд
//int count = proxyList.Count; // если строки берутся с удалением БЕЗ записи в конец списка (проверяем до талого, так сказать)
string protocol = project.Variables["Protocol"].Value+"://"; // из переменной, в переменной значение socks5:// или http:// (пустая переменная = http://)
lock (SyncObjects.ListSyncer) {
  for (int i = 0; i < count; i++) {
  if (proxyList.Count == 0) break;
  string proxy = proxyList[0];
  proxyList.RemoveAt(0);
  var content = ZennoPoster.HttpGet("https://www.google.com/", protocol + proxy);
if (content.ToString().Length >= 1500) { //если ответ от сервера больше чем 1500 символов, то прокси гуд . Можешь увеличить кол-во символов.
  proxyList.Add(proxy); // записываем живую проксю в конец списка
  instance.SetProxy(protocol+proxy);//Ставим проксю в инстанс (браузер зенки)
project.Variables["Proxy"].Value=protocol+proxy; //Устанавливаем прокси в переменную. Зачем в душе не ебу,но мне так нравится.
  return proxy;//если прокся гуд,то в добавок кидаем её в лог.
  }

//  proxyList.Add(proxy); // записываем проксю в конец списка в любом случае (предыдущее за комментировать!)

project.SendErrorToLog("Прокся плохая,чекаю ещё!");  // если прокся плохая пишем,что она плохая.
}
  throw new Exception("Прокси говнo!");//Если израсходовали все попытки подключения , то выходим из блока c# с таким сообщением.

}
}
И какой то не нормальный глюк. Устанавливает прокси, по логу трафика видно, что гугл отдал код 200, но прокси мертвый
Проверка прокси идёт не по ответу сервера т.к у каждого сервера/сайта может быть разный ответ 302/200/204/201. А по длине контента ,который сервер/сайт отправил в ответ.
p.s у меня вечная проблема с добавлением c# кода в тему.подскажите какой тег надо использовать?
 
Последнее редактирование:

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
  • Спасибо
Реакции: Sergeevich68

Sergeevich68

Client
Регистрация
10.06.2016
Сообщения
50
Благодарностей
25
Баллы
18

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Статус
Закрыто для дальнейших ответов.

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)