Авторизация на mail.ru

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Москва, 2 Apr 2011.

  1. Москва

    Москва New Member

    Joined:
    19 Oct 2010
    Messages:
    63
    Likes Received:
    3
    Reputations:
    0
    Не получается, вот сорц Indy 10 (Delphi)
    http://www.sendspace.com/file/zkexfx

    Я уже и так и сяк https пробывал, может быть что в CookieManager вата какаято, такое чувство что с него Http не считывает куки
     
  2. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    смотри httpanalyzer'ом че елает браузер при авторизации и делай так же:
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var wsa:wsadata;
    s:integer;
    sa:sockaddr_in;
    q:string;
    buf:array[0..127] of char;
    begin
    wsastartup(makeword(2,2),wsa);
    s:=socket(af_inet,sock_stream,0);
    sa.sin_family:=af_inet;
    sa.sin_port:=htons(80);
    sa.sin_addr.S_addr:=inet_addr(inet_ntoa(pinaddr(GetHostByname('win.mail.ru')^.h_addr_list^)^));
    connect(s,sa,sizeof(sa));
    q:='POST /cgi-bin/auth HTTP/1.1'#13#10+
    'Host: win.mail.ru'#13#10+
    'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0'#13#10+
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'#13#10+
    'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3'#13#10+
    'Keep-Alive: 115'#13#10+
    'Connection: keep-alive'#13#10 +
    'Referer: http://win.mail.ru/cgi-bin/login'#13#10+
    'Cookie: mrcu=813D4D81D2B455E1F97D0100007F; b=1joEACD0CAMAKg8OAQAQCS0I70QIZ2IIAQAA; p=KcsAAOF6wQAA; VID=2FMPfA2T6dms; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBAQEBAIABAAEAAAhfAQ8HygcA'#13#10+
    'Content-Type: application/x-www-form-urlencoded'#13#10+
    'Content-Length: '+inttostr(length('page=&post=&login_from=&Login=login&Domain=mail.ru&Password=pass'))+#13#10#13#10+
    'page=&post=&login_from=&Login=login&Domain=mail.ru&Password=pass';
    send(s,q[1],length(q),0);
    while recv(s,buf[0],128,0)>0 do memo1.Text:=memo1.Text+buf;
    closesocket(s);
    wsacleanup();
    end;
    
    куки парсь из http-заголовка, который приходит от сервера(строки "setcoockie: ")
     
    #2 realcoder, 3 Apr 2011
    Last edited: 3 Apr 2011
  3. Москва

    Москва New Member

    Joined:
    19 Oct 2010
    Messages:
    63
    Likes Received:
    3
    Reputations:
    0
    Покажи плиз на сорцах которые скинул чтоб при авторизации потом страницы уже норма работали, а то непонял я тебя
     
  4. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    зачем идти в лоб когда можно через GET запрос авторизироваться....

    http://games.mail.ru/mru/auth/login?login=МЫЛО&password=ПАРОЛЬ&foreign=


    {"ok":0} - неверный пароль
    {"ok":1} - верный пароль
     
    1 person likes this.
  5. Москва

    Москва New Member

    Joined:
    19 Oct 2010
    Messages:
    63
    Likes Received:
    3
    Reputations:
    0
    Авторизация то проходит куки записываются в менеджер, но новые страницы когда открываешь требует авторизация, куки реально чтоле несчитываются, щас переустановлю эти Indy, вот парево
     
  6. t-s

    t-s New Member

    Joined:
    5 Mar 2011
    Messages:
    30
    Likes Received:
    4
    Reputations:
    0
    Ты лучше попробуй спарси эти куки и вручную составь запрос аналогичный тому который шлет браузер.
     
  7. Москва

    Москва New Member

    Joined:
    19 Oct 2010
    Messages:
    63
    Likes Received:
    3
    Reputations:
    0
    Да я брал эти куки вставлял в браузер, сразу заходило на страницу под мылом
     
  8. t-s

    t-s New Member

    Joined:
    5 Mar 2011
    Messages:
    30
    Likes Received:
    4
    Reputations:
    0
    Не в браузер, я имею в виду составь запрос вручную и отправь. При логине (первом запросе) сервер тебе возвращает cookie, вырежи их с помощью строковых функций

    если не ошибаюсь - отсюда:

    Code:
    cookie := http.Response.RawHeaders.Text;

    и составь новый запрос.

    Code:
    IdHTTP1.Request.CustomHeaders.Add("тут куки которые ты получил в первом запросе.");
    С indy я мало работал но вроде как то так..
     
  9. Москва

    Москва New Member

    Joined:
    19 Oct 2010
    Messages:
    63
    Likes Received:
    3
    Reputations:
    0
    Во я заипался, снес короче Indy начал заново ставить последнюю версию за 3 апреля этого года и чето напартачил. переустановил делфи и воткнул все правильно откомпилировал как пишут, без ошибок. Но сами инди не появляются вкладки че за вата?
     
  10. Москва

    Москва New Member

    Joined:
    19 Oct 2010
    Messages:
    63
    Likes Received:
    3
    Reputations:
    0
    Все заработало как t-s написал))

     
    #10 Москва, 5 Apr 2011
    Last edited: 5 Apr 2011
  11. Москва

    Москва New Member

    Joined:
    19 Oct 2010
    Messages:
    63
    Likes Received:
    3
    Reputations:
    0
    Теперь новая фигня, раньше работал код, седня днем перестал
    Значит авторизуюсь и вывожу заголовки
    Заголовок выводит:
    Страница мыла загружается только после ввода аккаунта, но после перехода на другие не грузит аккаунт т.к. куков Mpop не выдается в IdHTTP. Что за шняга, вчера работало все отлично.
     
  12. Москва

    Москва New Member

    Joined:
    19 Oct 2010
    Messages:
    63
    Likes Received:
    3
    Reputations:
    0
    Все разобрался, когда авторизация проходит, автоматом кидает на Redirect to: http://e.mail.ru/cgi-bin/msglist?back=1
    и получается ответ предыдущий затеряется. Для этого присоединил IDCookieManager

    и вывод кук
    Получается при поступлении кук в компонент, процедура срабатывает и выводит данные в переменную ACookie, а там дальше уже обрезаем, что нужно)