Показать сообщение отдельно

  #22  
Старый 24.04.2010, 16:04
1n0y
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме:
1682814

Репутация: 102
Отправить сообщение для 1n0y с помощью ICQ
По умолчанию

ребят, это снова я
вот функция авторизации, слизана у пухового.
собстно, в чем проблема: в таком виде куки не сохраняются и не передаются, изменить, скажем http.Response.ContentType внутри функции я тоже не могу
причем, если переменные и функции не делать локальными для потока (ну, тоесть какбэ один поток паралельный главному юзать) - всё отлично работает.
что я снова сделал не так?


Код:
  tgo = class(TThread)
  private
   http:TIdHTTP;
   IdCookieManager1:tidcookiemanager;
   compressor : tidCompressorZLib;
   name, pass,s,s2:string;
   post:tstringlist;
 function test_log_vk (name, pass : string) : string;
  protected
    procedure Execute; override;
  end;

function tgo.test_log_vk (name, pass : string) : string;
begin
  http:=tidhttp.Create;
  http.AllowCookies := True;
  http.HandleRedirects:=false;
  IdCookieManager1 := Tidcookiemanager.Create;
  http.CookieManager:=IdCookieManager1;
  compressor := tIdCompressorZLib.Create;
  http.Compressor := compressor;
  http.Request.AcceptEncoding := 'gzip,deflate';
  http.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
  http.ReadTimeout := 10000;
  post:=tstringlist.create;

  try
   http.get ('http://vk.com');
  except end;
  post.add ('op=a_login_attempt');
  try
   c:=http.post ('http://vk.com/login.php', post);
  except end;
   if ansipos('captcha_sid',c) <>0 then
    begin
     form1.Memo3.Lines.Add('капча!');
      if form1.CheckBox10.Checked=true then
       synchronize(get_capt_r)
      else
       begin
        synchronize(get_capt_auto);
       end;
     form1.Memo3.Lines.Add('обезьяны разгадали капчу: '+cap);
     post.add ('captcha_sid='+sid);
     post.add ('captcha_key='+cap);
     try
      http.post ('http://vk.com/login.php', post);
     except end;
    end;
  post.Clear;
  post.add ('email=' + name);
  post.add ('pass=' + pass);
  post.add ('expire=');
  post.add ('vk=1');
  try
   s := http.post ('http://login.vk.com/?act=login', post);
  except end;
  post.Clear;
   s2:=copy(s, pos('value=''',s)+7, 56);
  post.Add ('op=slogin');
  post.Add ('redirect=1');
  post.Add ('expire=0');
  post.Add ('to=');
  form1.Label2.caption:=s2;
  post.Add ('s=' + s2);
  try
   http.post ('http://vk.com/login.php', post);
   http.get (http.Response.Location);
  except end;
    if length(http.Response.Location)  = 0 Then
    begin
     result:='ok';
    end
   else
    begin
     result:='no_ok';
    end;
end;
 
Ответить с цитированием