Indy и прокси.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ange007, 16 Oct 2010.

  1. ange007

    ange007 Member

    Joined:
    26 Aug 2009
    Messages:
    28
    Likes Received:
    21
    Reputations:
    0
    Indy и ошибки при перепроверке прокси.

    Ребят, тут такое дело.
    При проверке прокси (проверяется присвоеное прокси потоку перед авторизацией) из http://awmproxy.com (с другими вроде всё норм), прокси проверяются в начале нормально, а потом лезут ошибки. Типо "не правильный запрос", "сервер не отвечает".
    Хотя список прокси обновляется время от времени.
    Но чем дальше, тем проверяются хуже.

    Code:
    function TSpamThread.check_proxy(l:boolean=False):boolean;
    var
      mess,err_mess: string;
      i: Integer;
      label g;
    begin
    
     {Проверка прокси}
    if Length(FProxyHost)>0 then
    begin
    g:
      if (stop=True) or (FContinue=True) then exit;
    
      if (i>=1) or (l=True) then Log('Проверяем прокси: '+FProxyHost);
    {}
      try
        mess := FH.Get('http://vkontakte.ru');
      except
          on e:EIdException do err_mess := E.Message;
      end;
    {}
       if
       (Pos('a_login_attempt',mess)>0)
       or (Pos('<form action="javascript:iphoneSearch();',mess)>0)
       or (Pos('<form method="post" name="login" id="login"',mess)>0)
       or (Pos('<div id="myLink">',mess)>0)
        then
       begin
        Result := True;
        if (i>=1) or (l=True) then Log('Используем прокси: '+FProxyHost);
        if (i>=1) and (l=False) and (autorization(FLogin,FPass,False)=false) then FContinue:=True;
       end
       else
       begin
        if Pos('Read timed out',err_mess)>0 then Log(FProxyHost+': слишком медленная прокси, меняем её!')
         else Log(FProxyHost+': прокси сдохла, меняем её!');
    
        if i<=main_f.m_proxy.Lines.Count-1 then
        begin
         if FH.Connected=True then
            try FH.Disconnect; except end;
         {}
         Synchronize(ch_proxy);
         {}
         if FProxyTag=0 then
         begin
          FH.ProxyParams.Clear;
          FH.ProxyParams.ProxyServer := FProxyHost;
          if FProxyPort>0 then FH.ProxyParams.ProxyPort := FProxyPort
            else Log('Ошибка: Нет порта прокси!');
          FH.ProxyParams.ProxyUsername := FProxyLogin;
          FH.ProxyParams.ProxyPassword := FProxyPass;
         end;
    
         if (FProxyTag=1) or (FProxyTag=2) then
         begin
         if Length(FProxyLogin)>1 then SI.Authentication := saUsernamePassword
              else SI.Authentication := sanoAuthentication;
          {}
          SI.Host := FProxyHost;
          if FProxyPort>0 then SI.Port := FProxyPort
             else Log('Ошибка: Нет порта прокси!');
          SI.Username := FProxyLogin;
          SI.Password := FProxyPass;
         end;
    
         i := i+1;
         goto g;
        end
        else
        begin
          if FNoProxySend=True then
           begin
             Log('Нет ни одной нормальной прокси,-работаем без неё.');
             {}
             if FH.Connected=True then
                try FH.Disconnect; except end;
             {}
             FProxyHost :='';
             FProxyPort := 0;
             FProxyLogin := '';
             FProxyPass := '';
    
             if FProxyTag=0 then
             begin
              FH.ProxyParams.Clear;
              FH.ProxyParams.ProxyServer := '';
              FH.ProxyParams.ProxyPort := 0;
              FH.ProxyParams.ProxyUsername := '';
              FH.ProxyParams.ProxyPassword := '';
             end;
    
             if (FProxyTag=1) or (FProxyTag=2) then
             begin
              SI.Host := '';
              SI.Port := 0;
              SI.Username := '';
              SI.Password := '';
             end;
    
            if (i>=1) and (l=False) and (autorization(FLogin,FPass,False)=false) then FContinue:=True;
           end
           else
           begin
            Log('Нет ни одной нормальной прокси,-прерываем работу.');
            FContinue := True;
           end;
            end;
       end;
    end;
    end;
    
    Мож кто знает с чем это связано может быть?
    Заранее спасибо за помощь.
     
    #1 ange007, 16 Oct 2010
    Last edited by a moderator: 17 Oct 2010
  2. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Учить матчасть: что такое исключение, и почему исключение != ошибка, как обрабатывать исключения, как настраивать среду разработки для игнорирования таких типов исключений, в конце концов узнать наконец разницу между запуском из-под отладчика и обычным

    PS Какой здесь вопрос и какой будет мой ответ понял уже увидев название темы. Вам что млять, всем книги читать западло?
     
  3. ange007

    ange007 Member

    Joined:
    26 Aug 2009
    Messages:
    28
    Likes Received:
    21
    Reputations:
    0
    GhostOnline, причем здесь вообще то что ты написал?
    Я вообщето спросил почему в данном конкретно случае Инди вначале нормально принимает прокси, а после при переборе списка прокси дает ошибки сервера. Хотя не могут же все поголовно прокси быть дохлыми хразу после 2го круга проверки.
    Может это какиет ограничения awmproxy?Мож нужно както по особому менять/очищать прокси/соксы?
    Я конкретно это не могу понять.
     
  4. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    а вот при этом:
    Про то что ошибки ошибки начинают лезть именно на втором проходе а первый нормально отрабатывает ты не написал.
    А мне что думать? Вот я и применил к тебе стеретип новичка путающего ошибки с исключениями.
    практически постоянно работаю именно с awmproxy, сначала на инди а щас на ICS, с обновлением списка - такой мистики не обнаружено.
    Ограничения могут быть на количество потоков, но тут не похоже на это
    idhttp глобальный? на форме? или где? можно попробовать пересоздавать
     
  5. ange007

    ange007 Member

    Joined:
    26 Aug 2009
    Messages:
    28
    Likes Received:
    21
    Reputations:
    0
    idHTTP и остальные компоненты создаются в каждом потоке отдельно (только CookieManager общий).

    Получается примерно такая ситуёвина:
    Список обновляется, берётся прокси и проверяется, работает нормально.
    Так прокси 20, потом понемногу начинают появляться ошибки.
    Потом список обновляется снова (так как обновление по таймеру).
    После этого нормальными проходят только 50% прокси из списка.
    А на 3е обновление уже только 10% прокси могут получить страничку.
     
  6. 0pTik

    0pTik Banned

    Joined:
    18 Jul 2010
    Messages:
    240
    Likes Received:
    85
    Reputations:
    17
    Сделай 1 поток и в руки отладчик , сразу поймешь в чем дело
     
  7. ange007

    ange007 Member

    Joined:
    26 Aug 2009
    Messages:
    28
    Likes Received:
    21
    Reputations:
    0
    Если честно то не вижу конкретного смысла выводит в один поток и там проверять.
    По сути я и так нормально проверить могу.
    Так собственно и делаю, просто все ошибки в лог вывожу из потока да и всё.

    Но ошибки только серверные вылазят, никаких AV и подобного.
    Вот и спрашиваю, может как-то "тонко" нужно чистить SocksInfo или SSLHandler?
    Куки я думаю явно роли не играют ни какой.