проблема с редиректом

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by egorea1999, 8 Jun 2013.

  1. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    пишу авторизацию на сайт,

    Code:
      http.HandleRedirects:=false;
    try
    http.Get('http://molotok.ru/myaccount/');
    except
    redirect:=http.Response.Location;
    end;
    try
    HTML1:=http.Get(redirect);
    except
    hash:=pars('<input type="hidden" name="global_login_hash" value="', HTML1,'" />');
    hash2:=pars('<input type="hidden" name="session" value="', HTML1,'" />');
    hash3:=pars('<input type="hidden" name="session_login_hash" value="', HTML1,'" />');
    hash4:=pars('<input type="hidden" name="url" value="', HTML1,'" />');
    hash5:=pars('<input type="hidden" name="cod" value="', HTML1,'" />');
    end;
    
    http.IOHandler:=ssl;
    data:=tstringlist.Create;
         data.Add('user_login='+FAcc);
         data.Add('user_password='+FPas);
           data.Add('global_login_hash='+hash);
           data.Add('session='+hash2);
            data.Add('session_login_hash='+hash3);
             data.Add('url='+hash4);
              data.Add('cod='+hash5);
        try
         HTML:=http.post('https://ssl.molotok.ru/login.php', data);
    
          Rez:=0;
         except
           // if HTTP.ResponseCode=302 then
     if Pos('Set-Cookie: QXLDATA=', HTTP.Response.RawHeaders.Text)<>0 then
    
    //if Pos('Location: /xmy/', HTTP.Response.RawHeaders.Text)<>0 then
    
    
        begin
           s:=http.Get('http://molotok.ru/show_user.php');
           if Pos('<div class="infobox-icon"><i class="icon-money"></i></div>'+#10+'		<div class="infobox-data">'+#10+'			<span class="infobox-data-number">',s)<>0 then
          begin
         dengi:=Pars('<div class="infobox-icon"><i class="icon-money"></i></div>'+#10+'		<div class="infobox-data">'+#10+'			<span class="infobox-data-number">',s,'</span>');
           end;
         Rez:=1;
          end
          else
         Rez:=-1;
          end;
          end;
         HTTP.Free;
         data.Free;
         Synchronize(Sync);
    end;
    
         dec(Thread);
           if Thread=0 then application.MessageBox('        Готово!', 'Информация');
         end;
    
    через сниффер посмотрел, идет первый гет запрос: http.Get('http://molotok.ru/myaccount/');
    потом получаем редирект, после, делаем по этому редиректу гет запрос и парсим оттуда нужные вещи...но сниффер не видит второго гет запроса, в чем моя ошибка?
     
  2. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Если запрос идет по https то может и не увидеть.
     
  3. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    https://ssl.molotok.ru/enter_login.php?session=NWNmY1EHW1VWU1JWBwMHUQxVXwYGBFoDA1sDWwVWUgIDUFYBBQEGBABSAFIDAVcHBFRVUAIFMjRiZg%3D%3D&global_login_hash=de7997d9c7fe15e673d33242ce86a1ba73cd59ff&session_login_hash=494ef42b7a2bb5162ad28cec0c08eb5a89e31df4&url=NTcyYwtGQ0YPGB0ODF5YQlpcHBEWHVpPVFRRDBZcQxljMjc2&cod=OGZkZlVlNmJk&version=A


    вот он какой, это должн быть второй гет, но его нету, так ещё и дело в том, что он данные не парсит с этого гета(второго)
     
  4. qw1mb1

    qw1mb1 Member

    Joined:
    8 Feb 2013
    Messages:
    113
    Likes Received:
    16
    Reputations:
    8
    https сниффер тебе не покажет. а не парсит потому что у тебя парсинг стоит после except, то есть только при возникновении исключения, что по идее не должно происходить
     
  5. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    сделал так

    Code:
    try
    HTML1:=http.Get(redirect);
    hash:=pars('<input type="hidden" name="global_login_hash" value="', HTML1,'" />');
    hash2:=pars('<input type="hidden" name="session" value="', HTML1,'" />');
    hash3:=pars('<input type="hidden" name="session_login_hash" value="', HTML1,'" />');
    hash4:=pars('<input type="hidden" name="url" value="', HTML1,'" />');
    hash5:=pars('<input type="hidden" name="cod" value="', HTML1,'" />');
    except
    end;
    [​IMG]


    бло :(

    не парсит
     
  6. qw1mb1

    qw1mb1 Member

    Joined:
    8 Feb 2013
    Messages:
    113
    Likes Received:
    16
    Reputations:
    8
    выведи куда-нибудь в программе ответ сервера после запроса, ответ может отличатся от того, что ты видишь в браузере, не мало раз с таким сталкивался
     
  7. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    после пост запроса?...просто не совсем понял
     
  8. seosimf

    seosimf Member

    Joined:
    3 Mar 2011
    Messages:
    271
    Likes Received:
    44
    Reputations:
    6
    Ну подсовывай свой ssl сертификат, игнорируй его проверку в коде и просматривай https без проблем.
     
  9. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    o_O
    а можно по подробнее как это сделать?
     
  10. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    У тебя старая Indy. Обнови до последней.
    Ответ сервера с ошибкой
    Code:
    10.4.8 407 Proxy Authentication Required
    
       This code is similar to 401 (Unauthorized), but indicates that the
       client MUST first authenticate itself with the proxy. The proxy MUST
       return a Proxy-Authenticate header field (section 14.33) containing a
       challenge applicable to the proxy for the requested resource. The
       client MAY repeat the request with a suitable Proxy-Authorization
       header field (section 14.34). HTTP access authentication is explained
       in section 11.
    
    Думаю переведешь и осмыслишь.
    Посмотри где к запросч порт добавляется и сделай, чтобы не добавлялся. (в настройках Indy)
     
  11. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    хм..у меня вроде indy 10
     
    #11 egorea1999, 12 Jun 2013
    Last edited: 12 Jun 2013
  12. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    чуть попозже попробую у себя твой код запустить. по результату отпишусь.

    Code:
    const
        USERAGENTS : array[0..14] of string[130] =
        ('Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.50',
        'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30',
        'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0',
        'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.9.168 Version/11.50',
        'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30',
        'Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0',
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30',
        'Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1',
        'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1',
        'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0',
        'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
        'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1',
        'Mozilla/5.0 (Windows NT 6.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1',
        'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18',
        'Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
    var HTTP:TidHTTP;
        SSL:TIdSSLIOHandlerSocketOpenSSL;
        Socks:TidSocksInfo;
        redirect,res,dengi,s:string;
        rez:Integer;
        Data:TStringList;
    begin
      HTTP:=TIdHTTP.Create;
      SSL:=TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
      Socks:=TIdSocksInfo.Create(SSL);
      Socks.Version:=svNoSocks;
      Socks.Authentication:=saNoAuthentication;
      SSL.TransparentProxy:=Socks;
      HTTP.IOHandler:=SSL;
      HTTP.CookieManager:=TidCookieManager.Create;
      HTTP.Request.UserAgent:=USERAGENTS[Random(Length(USERAGENTS))];
      HTTP.ReadTimeout:=10000;
      HTTP.ConnectTimeout:=40000;
      HTTP.RedirectMaximum:=2;
      HTTP.HandleRedirects:=True;
      Data:=TStringList.Create;
      try
        http.HandleRedirects:=false;
        try
          http.Get('http://molotok.ru/myaccount/');
        except
          redirect:=http.Response.Location;
        end;
        try
          res:=http.Get(redirect);
        except
        end;
        data.Add('user_login='+FAcc);
        data.Add('user_password='+FPas);
        data.Add('global_login_hash='+pars('<input type="hidden" name="global_login_hash" value="', res,'" />'));
        data.Add('session='+pars('<input type="hidden" name="session" value="', res,'" />'));
        data.Add('session_login_hash='+pars('<input type="hidden" name="session_login_hash" value="', res,'" />'));
        data.Add('url='+pars('<input type="hidden" name="url" value="', res,'" />'));
        data.Add('cod='+pars('<input type="hidden" name="cod" value="', res,'" />'));
          try
            res:=http.post('https://ssl.molotok.ru/login.php', data);
            Rez:=0;
          except
            on E:EIdHTTPProtocolException do
            if E.ErrorCode=302 then
              if Pos('Set-Cookie: QXLDATA=', HTTP.Response.RawHeaders.Text)<>0 then
                begin
                  try
                   s:=http.Get('http://molotok.ru/myaccount/bid.php');
                  except
                  end;
                  if Pos('<div class="infobox-icon"><i class="icon-money"></i></div>'+#10+'		<div class="infobox-data">'+#10+'			<span class="infobox-data-number">',s)<>0 then
                  begin
                    dengi:=Pars('<div class="infobox-icon"><i class="icon-money"></i></div>'+#10+'		<div class="infobox-data">'+#10+'			<span class="infobox-data-number">',s,'</span>');
                   end;
                  Rez:=1;
                end
              else
                Rez:=-1;
          end;
      finally
        HTTP.CookieManager.Free;
        Socks.Free;
        SSL.Free;
        HTTP.Free;
        data.Free;
      end;
    end;
    чуть подудалял лишние переменные, но код не оптимизировал. Смотри сам.
    Сейчас деньги не парсит т.к. страничка не та, но логин проходит удачно

    Пруф:
    [​IMG]
     
    #12 xophet, 12 Jun 2013
    Last edited: 12 Jun 2013
  13. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    СПАСИБО ОГРОМЕННОЕ!!!
    СЕЙЧАС ПРОТЕСТЮ
    _____
    Вроде всё работает, но я криворукий и у меня почему-то не выводит верный гуд http://s018.radikal.ru/i516/1306/18/2c043c9e6be9.png , всё в бад кидает
     
    #13 egorea1999, 13 Jun 2013
    Last edited: 13 Jun 2013
  14. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    я ж говорю Indy обнови или настрой. Смотри: у тебя во время обращения на https://ssl.molotok.ru добавляет порт 443
    у меня же такого нет.
     
  15. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    у меня indy 10.5 или как-то так..
     
  16. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    в общем потом этот молоток посомтрю, есть ещё такой код

    Code:
    http.IOHandler:=ssl;
    data:=tstringlist.Create;
         data.Add('login='+FAcc);
         data.Add('passwd='+FPas);
         data.Add('OK.x=');
         data.Add('OK.y=');
    
    
    
    
    
        try
         HTML:=http.Post('http://advert-control.ru/', data);
    
       if Pos('Location: executor_stats.php', HTTP.Response.RawHeaders.Text)<>0 then
    
        begin
           s:=http.Get('http://advert-control.ru/executor_stats.php');
           if Pos('<span id="wallet">',s)<>0 then
          begin
         lvl:=Pars('<span id="wallet">',s,'</span>');
     end;
         Rez:=1
          end
         else
         Rez:=0;
         except
         Rez:=-1;
          end;
          end;
    HTTP.Free;
         data.Free;
         Synchronize(Sync);
          end;
    
         dec(Thread);
           if Thread=0 then application.MessageBox('        Готово!', 'Информация');
         end;
    через сниффер всё нормально,а вот в мемо не добавляет этот гудовый акк.

    [​IMG]

    или опять тут инди виновата?
     
  17. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Смотреть не буду, а то я так в скором времени тебе логины под все сайты напишу. Разбирайся сам.
    Куда копать, в чем может быть проблема я подсказал.
    У меня работает. У тебя нет. Ищи разницу.
     
  18. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    хорошо, спасибо)
     
  19. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    во всем разобрался!

    http://wf.mail.ru/

    но вот ещё одна загвоздка....не хочет искать гуд,если через сайт, то есть, а если запустить программу и запустить сниффер, то там не будет этого куки о_О чудесаа...
    помогите пожалуйста!
    вот валидный акк: [email protected];egorea1999
    Code:
    http.IOHandler:=ssl;
    data:=tstringlist.Create;
         data.Add('name='+FAcc);
         data.Add('pass='+FPas);
         data.Add('op=');
    data.Add('form_id=user_login_block');
    
              html:=Http.Get('http://wf.mail.ru/node');
    hash:=pars('<input type="hidden" name="form_build_id" id="', html, '"');
        data.Add('form_build_id='+hash);
    
        try
         HTML:=http.post('http://wf.mail.ru/node', data);
      if Pos('Set-Cookie: Mpop=', HTTP.Response.RawHeaders.Text)<>0 then
    then
    
    
        begin
    
            begin
     end;
         Rez:=1
          end
         else
         Rez:=0;
         except
    Http.Response.RawHeaders.Text)<>0 then
         Rez:=-1;
          end;
          end;
    HTTP.Free;
         data.Free;
         Synchronize(Sync);
          end;
    
     
  20. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    кто поможет?)