[Delphi] бот для форума

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ADR-007, 7 Aug 2010.

  1. ADR-007

    ADR-007 Member

    Joined:
    12 Jul 2010
    Messages:
    218
    Likes Received:
    9
    Reputations:
    0
    пишу бота для форума умеющего создавать сообщения / темы
    возникла проблема: при попытке создать тему / пост (через ПОСТ запрос) в ответ приходит страница с сообщением "заполните поля: тема и сообщение" что можно с этим сделать и откуда в сервера в такая инфа?? с кукив??
     
  2. Bretymev

    Bretymev Banned

    Joined:
    6 Aug 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Снифер в руки..и вперёд. :)
     
  3. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Может быть ты просто не заполнил эти поля? Оттуда и инфа.
     
  4. ADR-007

    ADR-007 Member

    Joined:
    12 Jul 2010
    Messages:
    218
    Likes Received:
    9
    Reputations:
    0
    а как их заполнить? я отправляй ПОСТ запросы TIdHttp ...
    в ПОСТ есть все что надо ...

    (Все делаю так же как показывает сниффер)
     
  5. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Видимо сервер владеет телепатией. А вот мы нет, так что показывай код :)
     
  6. 0xF0RD

    0xF0RD Member

    Joined:
    2 Dec 2009
    Messages:
    49
    Likes Received:
    6
    Reputations:
    0
    Кинь на форму компонент IdCookieManager (Indy)
    а в свойствах компонента TIdHttp пропиши IdCookieManager
     
  7. ADR-007

    ADR-007 Member

    Joined:
    12 Jul 2010
    Messages:
    218
    Likes Received:
    9
    Reputations:
    0
    весь код около 350 строк ...
    изложения три функции


    Code:
    procedure THackUACache.[B]GetTopicParam[/B](var TopicParam: TNewTopicParam);
    
      function GetStr(str,Bgn:string):string;
      const
        Fend          :string='" />';
      begin
        Result:=GetContent(str,bgn,fend);
      end;
    
    var
      str:string;
    const
      URL           :string='http://hackua.com/newthread.php?do=newthread&f=';
      Fs		        :string='<input type="hidden" name="s" value="';
      Fsecuritytoken:string='<input type="hidden" name="securitytoken" value="';
      Fdo		        :string='<input type="hidden" name="do" value="';
      Fposthash	    :string='<input type="hidden" name="posthash" value="';
      Fpoststarttime:string='<input type="hidden" name="poststarttime" value="';
      Floggedinuser	:string='<input type="hidden" name="loggedinuser" value="';
    const
      Awysiwyg	:string='0';
      Aiconid		:string='0';
      Aparseurl	:string='1';
      Aemailupdate	:string='9999';
      Apolloptions	:string='4';
      Asbutton	:string='%C4%EE%E4%E0%F2%E8+%ED%EE%E2%F3+%F2%E5%EC%F3';
    
    begin
      str:=FHttp.Get(URL+TopicParam.f);
      TopicParam.URL          :=  URL+TopicParam.f;
      TopicParam.wysiwyg      :=  Awysiwyg;
      TopicParam.iconid       :=  Aiconid;
      TopicParam.s            :=  GetStr(str,Fs);
      TopicParam.securitytoken:=  GetStr(str,Fsecuritytoken);
      TopicParam.Fdo          :=  GetStr(str,Fdo);
      TopicParam.posthash     :=  GetStr(str,Fposthash);
      TopicParam.poststarttime:=  GetStr(str,Fpoststarttime);
      TopicParam.loggedinuser :=  GetStr(str,Floggedinuser);
      TopicParam.sbutton      :=  Asbutton;
      TopicParam.parseurl     :=  Aparseurl;
      TopicParam.emailupdate  :=  Aemailupdate;
      TopicParam.polloptions  :=  Apolloptions;
    end;
    
    function THackUACache.[B]ConvertTopicPost[/B](const TopicParam: TNewTopicParam): TStrings;
    begin
      Result:=TStringList.Create;
      with TopicParam do
        Result.text:=
              'POSTDATA=subject='+POSTDATA+
              '&message='+       Fmessage+
              '&wysiwyg='+      wysiwyg+
              '&iconid='+       iconid+
              '&s='+            s+
              '&securitytoken='+securitytoken+
              '&f='+            f+
              '&do='+           Fdo+
              '&posthash='+     posthash+
              '&poststarttime='+poststarttime+
              '&loggedinuser='+ loggedinuser+
              '&sbutton='+      sbutton+
              '&parseurl='+     parseurl+
              '&emailupdate='+  emailupdate+
              '&polloptions='+  polloptions;
      //result.Text:=StringReplace(result.Text,'&',#13#10,[rfReplaceAll]);
    
    end;
    
    function THackUACache.[B]UpTopic[/B](CashURL: string): boolean;
    var
      code      :PChar;
      PostParam :TNewTopicParam;
      param     :TPostParam;
    begin
      code:=pchar(FHttp.Get(CashURL));
    
      param:=GetTopic(code);
      PostParam:=GetTopicParam(param.f);
    
      PostParam.POSTDATA  :=  ConvertCodeToSrc(param.Title);
      PostParam.Fmessage   :=  '[COLOR="DarkOrange"][B]Автор: '+param.User+
                              '[/B][/COLOR]%0D%0A%0D%0A'+param.Content;
    
      //FHttp.AllowCookies:=false;
      //FHttp.HandleRedirects:=false;
      //FHttp.CookieManager.AddCookie('Cookie=__utma=7521707.1154547405.1280527117.1281129295.1281133980.23; __utmz=7521707.1280763724.7.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=cache:xviTQSfV_H8J:hackua.com/showthread.php%3Ft%3D1775%20site:Hackua.com; __utmc=75'+'21707; __utmb=7521707.8.10.1281133980; bbsessionhash=89a5a8bda62e99ea838f652b7dd8ec2b; bblastvisit=1281134092; bblastactivit'+'y=0; bbforum_view=a415af04773e860338bccfa8285cebd61d729350a-1-%7Bi-90_i-1281135486_%7D; bbuserid=572; bbpassword=84f05f513fdd6af264c3fb5c539a99b1',TIdURI.Create(''));
      with TStringList.Create do
      begin
        Text:= FHttp.Post(PostParam.URL,ConvertTopicPOST(PostParam));
    //    FHttp.Post(PostParam.URL,convertTopicPost(PostParam));
        SaveToFile('ff.txt');
        convertTopicPost(PostParam).SaveToFile('fff.txt');
      end;
    end;
     
    #7 ADR-007, 7 Aug 2010
    Last edited: 7 Aug 2010
  8. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    'POSTDATA=subject='+POSTDATA+
    Может в этом дело? Попробуй так:
    'subject='+POSTDATA+

    И вот эту строчку:
    //result.Text:=StringReplace(result.Text,'&',#13#10,[rfReplaceAll]);
    Раскоменть обратно.

    З.Ы. С инди дано дела не имел, могу ошибаться
     
    1 person likes this.
  9. ADR-007

    ADR-007 Member

    Joined:
    12 Jul 2010
    Messages:
    218
    Likes Received:
    9
    Reputations:
    0
    'POSTDATA=subject='+POSTDATA+
    в снифере так ... можно будет попробуваты и твой вариант ... проблема в том что сайт для которого я писал эту прогу временно не работает ...

    Раскоменть пробыл ...
     
  10. ADR-007

    ADR-007 Member

    Joined:
    12 Jul 2010
    Messages:
    218
    Likes Received:
    9
    Reputations:
    0
    ты был прав)

    теперь другая проблема - не та кодировку Utf8ToAnsi и обратно не помогает ...
     
  11. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Попробуй UTF8Encode();
     
  12. ADR-007

    ADR-007 Member

    Joined:
    12 Jul 2010
    Messages:
    218
    Likes Received:
    9
    Reputations:
    0
    недопомагає...
     
  13. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    А ты уверен что там не Юникод?
     
  14. ADR-007

    ADR-007 Member

    Joined:
    12 Jul 2010
    Messages:
    218
    Likes Received:
    9
    Reputations:
    0
    хз...
    це "Автор" = "Автор"
     
  15. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    UTF-8
     
  16. ADR-007

    ADR-007 Member

    Joined:
    12 Jul 2010
    Messages:
    218
    Likes Received:
    9
    Reputations:
    0
    и что делать?
     
  17. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Если отсылается не в той кодировке, тогда думать, снифать, сравнивать, опять думать...
    А если присылается не в той, тогда UTF8Decode();
     
    1 person likes this.
  18. ADR-007

    ADR-007 Member

    Joined:
    12 Jul 2010
    Messages:
    218
    Likes Received:
    9
    Reputations:
    0
    при отсылке...

    неужели в никого не было такого??? (Среда Delphi 2010)
     
  19. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Хех, родимый, с этого и стоило начать) В 2010 дельфи все строки по умолчанию юникодные. Так что преобразовывай юникод а анси
     
  20. ADR-007

    ADR-007 Member

    Joined:
    12 Jul 2010
    Messages:
    218
    Likes Received:
    9
    Reputations:
    0
    как?
    Utf8ToString (или ToAnsiString) не помогает ... и TStrings использует не Анси
    через TStringStream почему вообще нифига не получается ... (Сервер не понимает что у него хотят)