[Delphi] Cookie

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ImLucky, 17 Dec 2011.

  1. ImLucky

    ImLucky New Member

    Joined:
    26 Sep 2010
    Messages:
    72
    Likes Received:
    3
    Reputations:
    0
    Всем привет !

    Пишу что-то типа парсер\чекер в одном флаконе. Столкнулся с проблемой сохранения кукисов. То есть после успешной авторизации, при попытке перейти\загрузить страницу, получается так, что я это делаю как не авторизированный пользователь. Проверял снифером - куки не добавляются вообще, хотя в браузере всё нормально. Довольно часто приходилось писать подобные проги, но с такой проблемой ещё не сталкивался. Прошу помочь и подсказать в чем может быть проблема ? Уже перепробовал по моему всё что только можно было.


    Код авторизации.
    Code:
    begin
    Http := TIdHTTP.Create(Self);
    Data := TStringList.Create;
    CM := TidCookieManager.Create(Http);
    Http.AllowCookies := true;
    Http.CookieManager := CM;
    Http.HandleRedirects := true;
    Http.Request.Host:='www.zzima.com';
    Http.Request.ContentType:='application/x-www-form-urlencoded' ;
    Http.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; MRSPUTNIK 2, 4, 0, 270; MRA 5.8 (build 4133); SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; Creative AutoUpdate v1.41.02)';
    Http.Request.Accept:='image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*';
    Http.Request.AcceptLanguage:='ru-RU';
    Http.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.7';
    Http.Request.Referer:='http://www.zzima.com/';
    Data.Add('data[email]='+Edit3.Text);
    Data.Add('data[password]='+Edit4.Text);
    Data.Add('remember=on');
    StrPage := Http.Post('http://www.zzima.com/ajax.php?page=account&action=login', Data);
    if StrPage[11] = 't' then
    StatusBar1.SimpleText:='Авторизовались.'
    else
    StatusBar1.SimpleText:='Авторизация провалена.';
    memo1.text:= http.Get('http://www.zzima.com/gameMembers82&ni=0&pg=0');
    
     
  2. fuckyoupig

    fuckyoupig Member

    Joined:
    1 Mar 2011
    Messages:
    0
    Likes Received:
    11
    Reputations:
    2
    Code:
      cookie : tidcookiemanager;
    
    Cookie := TidCookieManager.Create(nil);
    idhttp1.CookieManager := cookie;
    idhttp1.AllowCookies := True;
     
  3. ImLucky

    ImLucky New Member

    Joined:
    26 Sep 2010
    Messages:
    72
    Likes Received:
    3
    Reputations:
    0
    Спасибо, но не помогло. Блин, на форуме этого же сайта всё нормально. И логинюсь, и парсю.. А на самом сайте вообще не пойми что, к тому же там ещё как я понял два вида авторизации.

    Первый идет тот, который в моём коде..

    Второй идет с другими данными.

    И ссылка для авторизация другая.. сейчас уже не найду.
    Хотя по сути, первый вариант верный.. хотя бы если судить по этому - http://forum.antichat.ru/showpost.php?p=2030736&postcount=16
     
  4. ImLucky

    ImLucky New Member

    Joined:
    26 Sep 2010
    Messages:
    72
    Likes Received:
    3
    Reputations:
    0
    Всё ещё актуально, прошу помочь знающих людей.
     
  5. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Попробуй в ручную.
    ex.
    Code:
    for icook := 0 to idhttp1.Response.RawHeaders.Count - 1 do
              begin
                if Pos('Set-Cookie: ',idhttp1.Response.RawHeaders[icook])>0 then
                  begin
                  Cookie:=SysUtils.StringReplace(idhttp1.Response.RawHeaders[icook],'Set-Cookie: ','',[]);
                  cookz:=cookz+Cookie+';';
                  end;
                 if Pos('Set-cookie: ',idhttp1.Response.RawHeaders[icook])>0 then
                 begin
                  Cookie:=SysUtils.StringReplace(idhttp1.Response.RawHeaders[icook],'Set-cookie: ','',[]);
                  cookz:=cookz+Cookie+';';
                 end;
              end;
    

    Code:
    idhttp1.Request.CustomHeaders.Add('Cookie: '+cookz);
     
    1 person likes this.
  6. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Программировал в вебе средствами инди... Обламало.
    cheater_man, Описал ПРАВИЛЬНУЮ работу с кукисами средствами инди.
    ИМХО WinInet и только WinInet...