получилось только одним способом. создал переменную co:TThread (класс моего потока)
и останавливаю поток co:Suspend;
но получается немного не так как хотелось бы...
моя цель :
я делаю многопоточный брут. при нескольких обращениях к одному логину на сайте выскакивает капча. мне нужно ее отловить и ввести.
ставлю условие :
Код:
if pos('capcha',s1)<>0 then
begin
....
co.suspend;
......
при 1 потоке поток останавливается и я ввожу капчу - авторизация на сайт проходит.
при потоках больших одному, поток с капчей останавливается но капча не проходит так как в условии есть такие строки
Код:
login:=(poss.Strings[0]);
password:=(poss.Strings[1]);
переменные login, password при правдивом условии добавляют в себя строки в которых содержится логин[0] и пароль[1].
соответственно при кол-ве потоков которые больше одного вы скакивает сразу несколько капч. поэтому картинка (капча) остается одна, а login и password берутся из следующей капчи.
как быть ?
вот сам код:
Код:
poss.Add('name='+Facc);
poss.Add('password='+Fpas);
poss.Add('link_id=');
poss.Add('sid=');
HTTP:=TIdHTTP.Create(nil);
HTTP.HandleRedirects:=True;
try
s1:=http.Post('http://spaces.ru/mysite/',poss); // отправляется пост запрос на сервер. нам еще не известно что будет капча
login:=(poss.Strings[0]);
password:=(poss.Strings[1]);
if pos('capcha',s1)<>0 then // условие проверки капчи
begin
reg.Expression:='http://spaces.ru/capcha/(.*?)"';
if reg.Exec(s1)then
s3:= (reg.Match[1]);
poss1:=tstringlist.Create;
PNG:=TPNGImage.Create;
memStream:=TMemoryStream.Create;
http.Get('http://spaces.ru/capcha/'+s3,memstream);
memstream.Position:=0;
PNG.LoadFromStream(memstream);
form1.Image1.Picture.Assign(PNG);
PNG.Free;
memstream.Free;
co.Suspend;
poss1.Add('sid=');
poss1.Add(login);
poss1.Add(password);
poss1.Add('link_id=');
poss1.Add('captcha_code='+form1.edit2.Text);
s1:=http.Post('http://spaces.ru/mysite/?sid=',poss1); // пост запрос уже с введенной капчей
end;
в обработчике кнопки button написан следующий код:
co.Resume;