Plz Help with Ac-Service captcha recognize

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ex3me, 7 Sep 2009.

  1. ex3me

    ex3me Member

    Joined:
    7 Jan 2009
    Messages:
    0
    Likes Received:
    63
    Reputations:
    0
    Реально переписать данную функцию с использованием Wininet? Пробовал по-разному, да вот проблемка с загрузкой файла =\
    Code:
    function recognize(filename: string; apikey: string; is_phrase: boolean; is_regsense: boolean; is_numeric: boolean; min_len: integer; max_len: integer): string;
    var
    	ftype,tmpstr,captcha_id: String;
    	i: integer;
    	http: TIdHTTP;
    	multi: Tidmultipartformdatastream;
    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://ac-service.info/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 begin captcha_id:=AnsiReplaceStr(tmpstr,'OK|','');   end;
    	if captcha_id='' then  begin result:='ERROR: bad captcha id'; end;
    	for i:=0 to 20 do 
    	begin
    		Application.ProcessMessages;
    		sleep(5000);
    		http:=TIdHttp.Create(nil);
    		tmpstr:=http.Get('http://ac-service.info/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;
    
     
  2. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    939
    Likes Received:
    162
    Reputations:
    27
    Под WinInet, не знаю, но, скорее всего, можно.
    На 100% знаю, что можно переработать на работу с Winsock, и это будет самым наилучшим вариантом.
     
  3. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Подробней про эту проблемку напиши. В чем сложности возникли?
     
Loading...