Взять с начала списка и положить в конец списка

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113
Если что-то не так, поправьте пожалуйста
Всё норм, но можно было и просто заменить return "Ok";
на return proxy;
и выбрать переменную, в которую нужно вернуть результат.
 
  • Спасибо
Реакции: GreenWay

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
а цикл в этом для чего ???
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
Отлично, давайте сделаем универсальный код, который будет для всех полезен. Юзаю его по сей день, очень полезная и актуальная штука. По сути что нужно в этом снипете.

Все это в цикле и в локе.

Берем строку с удалением.
Проверяем на пустоту.
Назначаем прокси.
Делаем запрос.
Проверяем на 200 OK.
Если все хорошо выходим из снипета.
Если нет, кладем прокси в конец списка либо удаляем (на выбор)
далее возвращаемся в начало списка и повторяем цикл.
 
  • Спасибо
Реакции: ks1989

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Отлично, давайте сделаем универсальный код, который будет для всех полезен. Юзаю его по сей день, очень полезная и актуальная штука. По сути что нужно в этом снипете.

Все это в цикле и в локе.

Берем строку с удалением.
Проверяем на пустоту.
Назначаем прокси.
Делаем запрос.
Проверяем на 200 OK.
Если все хорошо выходим из снипета.
Если нет, кладем прокси в конец списка либо удаляем (на выбор)
далее возвращаемся в начало списка и повторяем цикл.
предложил начинай
 
  • Спасибо
Реакции: ks1989

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113
а цикл в этом для чего ???
Как я понимаю, для того, чтобы когда взятые прокси записываются в конец списка, кубик не ушел в бесконечный цикл, когда все прокси дохлые. Что-то вроде количества попыток.
Проверяем на 200 OK.
На этом сайте http://chek.zennolab.com/ лучше, думаю, проверять - отклик быстрее да и родной он какой-то:-)
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Как я понимаю, для того, чтобы когда взятые прокси записываются в конец списка, кубик не ушел в бесконечный цикл, когда все прокси дохлые. Что-то вроде количества попыток.

На этом сайте http://chek.zennolab.com/ лучше, думаю, проверять - отклик быстрее да и родной он какой-то:-)
а при дохлых проксях сам рассуди зачем там цикл если он не обвёрнут в это

P.S. у этого кода одно действие согласись ???
 
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113
а при дохлых проксях сам рассуди зачем тачем там цикл если он не обвёрнут в это
Бля, тупанул:D Ты прав, что цикл лишний в этом случае.
Надо было просто местами поменять Гуд и Ошибку, тогда всё будет логично. Ну или это почти чекер прокси, если убрать return "ok"; и количество поставить list.Count
 
  • Спасибо
Реакции: ssXXXss

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Бля, тупанул:D Ты прав, что цикл лишний в этом случае.
Надо было просто местами поменять Гуд и Ошибку, тогда всё будет логично.
да проще цикл убрать думаю, ну или цикл кторый будет до нужного значения нам правильного работать
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
У меня реализовано все это в 3-х кубах. Делать большее лень, и я в шарпе не оч шарю. Так бы с удовольствием сделал.
А тут разве не так сделано?
http://zennolab.com/discussion/threads/vzjat-s-nachala-spiska-i-polozhit-v-konec-spiska.27242/#post-264580
там лишнее сделано, оно вообще ни к чему

P.S. выходя из кубика ты цикл теряешь как в том случае, так для чего такой цикл ??
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
и если это писать в кбике C# то не мало строк выйдет со всеми проверками и ещё и проксями
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
Вот я так сделал, правда это веб версия.
 

Вложения

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
я уже просто зеновские запросы забыл, давно уже перешёл на xNet, но давай попробуем что нить сообразить
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
начнём с простого, простой гет запрос

C#:
var url =project.Variables["Url"].Value ;
var proxy = project.Variables["Proxy"].Value;
var cookie = project.Variables["Cookie"].Value;
var userAgent = project.Variables["UserAgent"].Value;


string res = ZennoPoster.HttpGet(url,
    proxy,
    "windows-1251",
    InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    15000,
    cookie,
    userAgent,
    true,
    5,
    new String[]
    {   
        "Host: www.yandex.ru",
        "Connection: keep-alive",
        "Upgrade-Insecure-Requests: 1",
        "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",
        "Accept-Encoding: gzip, deflate, sdch",
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
    }
);

project.Variables["response"].Value = res;
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113
C#:
IZennoList proxyList = project.Lists["Proxy"];
int count = 10; // количество неудачных проверок подряд
//int count = proxyList.Count; // если строки берутся с удалением БЕЗ записи в конец списка (проверяем до талого, так сказать)

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/", proxy);
        if (content != string.Empty) {
            proxyList.Add(proxy); // записываем живую проксю в конец списка
            instance.SetProxy(proxy);
            return proxy;
        }
//        proxyList.Add(proxy); // записываем проксю в конец списка в любом случае (предыдущее закомментировать!)
    }
    throw new Exception("Ошибка!");
}
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
начнём с простого, простой гет запрос

C#:
var url =project.Variables["Url"].Value ;
var proxy = project.Variables["Proxy"].Value;
var cookie = project.Variables["Cookie"].Value;
var userAgent = project.Variables["UserAgent"].Value;


string res = ZennoPoster.HttpGet(url,
    proxy,
    "windows-1251",
    InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
    15000,
    cookie,
    userAgent,
    true,
    5,
    new String[]
    {  
        "Host: www.yandex.ru",
        "Connection: keep-alive",
        "Upgrade-Insecure-Requests: 1",
        "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",
        "Accept-Encoding: gzip, deflate, sdch",
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
    }
);

project.Variables["response"].Value = res;
Мне кажеться для проверки прокси, можно не использовать куки.
И как сказали выше, метод http://chek.zennolab.com/ лучше и быстрее.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
C#:
IZennoList proxyList = project.Lists["Proxy"];
int count = 10; // количество неудачных проверок подряд
//int count = proxyList.Count; // если строки берутся с удалением БЕЗ записи в конец списка (проверяем до талого, так сказать)

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/", proxy);
        if (content != string.Empty) {
            proxyList.Add(proxy); // записываем живую проксю в конец списка
            instance.SetProxy(proxy);
            return proxy;
        }
//        proxyList.Add(proxy); // записываем проксю в конец списка в любом случае
    }
    throw new Exception("Ошибка!");
}
Огонь!))
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Мне кажеться для проверки прокси, можно не использовать куки.
И как сказали выше, метод http://chek.zennolab.com/ лучше и быстрее.
что то я в предложении не увидел что имено такое что надо имено прокси проверять, да и тема вроде ни об этом )))))))))))))
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
ну тогда проще сделай в одну строку )))
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
C#:
IZennoList proxyList = project.Lists["Proxy"];
int count = 10; // количество неудачных проверок подряд
//int count = proxyList.Count; // если строки берутся с удалением БЕЗ записи в конец списка (проверяем до талого, так сказать)

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/", proxy);
        if (content != string.Empty) {
            proxyList.Add(proxy); // записываем живую проксю в конец списка
            instance.SetProxy(proxy);
            return proxy;
        }
//        proxyList.Add(proxy); // записываем проксю в конец списка в любом случае (предыдущее закомментировать!)
    }
    throw new Exception("Ошибка!");
}
а если 302, 400, 403 ошибка вылезет, у зено на такие ошибки нет Exception то что делать ??
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
  • Спасибо
Реакции: Dimionix

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
Вобще конечно, название темы не соответствует тому, что мы тут напридумывали. И очень жаль, сниппет очень классный. По этому, надо создать новую тему, с релевантным названием
и сниппетом @Dimionix
И раз уж ты его доделал, то можешь взять на себя честь сам создать эту тему. =)
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113
Вобще конечно, название темы не соответствует тому, что мы тут напридумывали. И очень жаль, сниппет очень классный. По этому, надо создать новую тему, с релевантным названием
и сниппетом @Dimionix
И раз уж ты его доделал, то можешь взять на себя честь сам создать эту тему. =)
Да зачем лишняя тема, всем кому надо и так, я думаю, разберутся где что. Но если очень хочешь, можешь сам создать, может кто чё полезного еще добавит.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
Да зачем лишняя тема, всем кому надо и так, я думаю, разберутся где что. Но если очень хочешь, можешь сам создать, может кто чё полезного еще добавит.
Твой снипет 100% работает. ты проверил?

У меня недавно выдавали проки 407 ошибку. Твой снипет такую ошибку поймает?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113
Твой снипет 100% работает. ты проверил?

У меня недавно выдавали проки 407 ошибку. Твой снипет такую ошибку поймает?
http://zennolab.com/discussion/threads/vzjat-s-nachala-spiska-i-polozhit-v-konec-spiska.27242/page-2#post-264659

Можно конечно, чтоб наверняка, заменить строку
if (content != string.Empty)
на
if (content.Contains(Regex.Match(proxy, @"(\d{1,3}\.){3}\d{1,3}").Value))
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
http://zennolab.com/discussion/threads/vzjat-s-nachala-spiska-i-polozhit-v-konec-spiska.27242/page-2#post-264659

Можно конечно, чтоб наверняка, заменить строку
if (content != string.Empty)
на
if (content.Contains(Regex.Match(proxy, @"(\d{1,3}\.){3}\d{1,3}").Value))
Фактически, если прокси не работает, то и запроса не будет, т.е. вероятнее всего будет пустой ответ, или 407.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
Если что-то подобное придет в теле ответа, то как раз от этого и спасет замена строки, т.е. прокси будет считаться невалидным.
Супер! значит вот снипет готовый.

C#:
IZennoList proxyList = project.Lists["Proxy"];
int count = 10; // количество неудачных проверок подряд
//int count = proxyList.Count; // если строки берутся с удалением БЕЗ записи в конец списка (проверяем до талого, так сказать)

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/", proxy);
        if (content.Contains(Regex.Match(proxy, @"(\d{1,3}\.){3}\d{1,3}").Value)) {
            proxyList.Add(proxy); // записываем живую проксю в конец списка
            instance.SetProxy(proxy);
            return proxy;
        }
//        proxyList.Add(proxy); // записываем проксю в конец списка в любом случае (предыдущее закомментировать!)
    }
    throw new Exception("Ошибка!");
}
 
Последнее редактирование:
  • Спасибо
Реакции: GreenWay и Dimionix

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