Всем привет ! Пишу что-то типа парсер\чекер в одном флаконе. Столкнулся с проблемой сохранения кукисов. То есть после успешной авторизации, при попытке перейти\загрузить страницу, получается так, что я это делаю как не авторизированный пользователь. Проверял снифером - куки не добавляются вообще, хотя в браузере всё нормально. Довольно часто приходилось писать подобные проги, но с такой проблемой ещё не сталкивался. Прошу помочь и подсказать в чем может быть проблема ? Уже перепробовал по моему всё что только можно было. Код авторизации. 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');
Code: cookie : tidcookiemanager; Cookie := TidCookieManager.Create(nil); idhttp1.CookieManager := cookie; idhttp1.AllowCookies := True;
Спасибо, но не помогло. Блин, на форуме этого же сайта всё нормально. И логинюсь, и парсю.. А на самом сайте вообще не пойми что, к тому же там ещё как я понял два вида авторизации. Первый идет тот, который в моём коде.. Второй идет с другими данными. И ссылка для авторизация другая.. сейчас уже не найду. Хотя по сути, первый вариант верный.. хотя бы если судить по этому - http://forum.antichat.ru/showpost.php?p=2030736&postcount=16
Попробуй в ручную. 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);
Программировал в вебе средствами инди... Обламало. cheater_man, Описал ПРАВИЛЬНУЮ работу с кукисами средствами инди. ИМХО WinInet и только WinInet...