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

  #6187  
Старый 18.04.2010, 19:52
S[N]EP
Познающий
Регистрация: 29.08.2008
Сообщений: 86
С нами: 9315345

Репутация: 53
По умолчанию

при работе с антикапчей, есть 2 кнопки
1 получает капчу и сохраняет в файл:
PHP код:
    form2.idhttp1.Request.CustomHeaders.Text:='Cookie: '+cookie;
streamresponse:=TMemoryStream.Create;
d:='http://127.0.0.1/captcha.php?key='+kapchaid;
form2.idhttp1.Get(d,streamresponse);
 
streamresponse.SaveToFile('rseserv.jpeg'); 
после чего кнопка отправки на антикапчу:
PHP код:
form2.edit3.Text:='recognizing...';
form2.Button1.Enabled:=false;
form2.edit3.Text:=recognize('rseserv.jpeg',form2.edit1.Text,false,false,false,0,0);
form2.Button1.Enabled:=true
и функция recognize.
PHP код:
function recognize(filenamestringapikeystringis_phrasebooleanis_regsensebooleanis_numericbooleanmin_lenintegermax_leninteger): string;
var
ftype,tmpstr,captcha_idString;
iinteger;
httpTIdHTTP;
multiTidmultipartformdatastream;

begin
if FileExists(filename)=false then begin result:='ERROR: file not found'; exit; end;

ftype:='image/pjpeg';
if 
strpos(Pchar(filename),'jpg')<>nil then ftype:='image/pjpeg';
if 
strpos(Pchar(filename),'gif')<>nil then ftype:='image/gif';
if 
strpos(Pchar(filename),'png')<>nil then ftype:='image/png';

multi:=Tidmultipartformdatastream.Create;
multi.AddFormField('method','post');
multi.AddFormField('key',apikey);
multi.AddFile('file',filename,ftype);
if 
is_phrase=true then multi.AddFormField('phrase','1');
if 
is_regsense=true then multi.AddFormField('regsense','1');
if 
is_numeric=true then multi.AddFormField('numeric','1');
if 
min_len>0 then multi.AddFormField('min_len',inttostr(min_len));
if 
max_len>0 then multi.AddFormField('max_len',inttostr(max_len));

http:=TIdHTTP.Create(nil);
tmpstr:=http.Post('http://antigate.com/in.php',multi);
http.Free;
captcha_id:='';
if 
strpos(Pchar(tmpstr),'ERROR_')<>nil then begin result:=tmpstr; exit; end;
if 
strpos(Pchar(tmpstr),'OK|')<>nil then captcha_id:=AnsiReplaceStr(tmpstr,'OK|','');
if 
captcha_id='' then result:='ERROR: bad captcha id';
for 
i:=0 to 20 do
  
begin
  Application
.ProcessMessages;
  
sleep(5000);
  
http:=TIdHttp.Create(nil);
  
tmpstr:=http.Get('http://antigate.com/res.php?key='+apikey+'&action=get&id='+captcha_id);
  
http.Free;
  if 
strpos(Pchar(tmpstr),'ERROR_')<>nil then begin result:=tmpstr; exit; end;
  if 
strpos(Pchar(tmpstr),'OK|')<>nil then
    begin
    result
:=AnsiReplaceStr(tmpstr,'OK|','');
    exit;
    
end;
  
Application.ProcessMessages;
  
end;
result:='ERROR_TIMEOUT';
end
так вот, когда первый раз отсылаю, всё работает, а когда идёт вторая попытка через определённый промежуток времени, выдаёт ошибку файл не может быть перезаписан т.к. он используется.... что делать?
 
Ответить с цитированием