Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2011, 18:04   #1
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию Проблемы с антикаптчей

Добрый день, уважаемые форумчане. Проблема с антикаптчей, точнее с ее реализацией. Я использую стандартную функцию для оправки файла на antigate.com:
Код:
 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;
id:string;
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';

http:=TIdHTTP.Create(nil);

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 10 do
  begin
  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;
  end;
result:='ERROR_TIMEOUT';
  exit;
  end;
Ну естественно вызываю ее :
Код:
 form1.label10.caption:=recognize(ExtractFilePath(ParamStr(0))+'1.png',form13.key1.Text,false,false,false,0,0);
Кроме этого я конечно же сохраняю картинки с сайтов:
Код:
Captcha1:=TMemoryStream.Create;
     form1.IdHTTP1.Get(capUrl,Captcha1);
     Captcha1.Position:=0;
     Captcha1.savetoFile(ExtractFilePath(ParamStr(0))+'1.png');
Первая отправка картинки происходит нормально, только потом у меня появляются проблемы, а именно говорит, что файл занят другим процессом. Как можно от этого избавиться? Покопался в коде, вроде ничего "конфликтного" нету. Опытным взглядом прошу посмотреть. ))
kardinal94 вне форума Ответить с цитированием
Старый 03.02.2011, 18:20   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а где Free на multi?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.02.2011, 18:39   #3
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Хмммм, действительно его не было, сделал так:
Код:
tmpstr:=http.Post('http://antigate.com/in.php',multi);
http.Free;
multi.Free;
Все равно не помогает. (
kardinal94 вне форума Ответить с цитированием
Старый 03.02.2011, 18:58   #4
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Captcha1.free после сохранения
Voody вне форума Ответить с цитированием
Старый 03.02.2011, 19:28   #5
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию


все та же ересь

Последний раз редактировалось kardinal94; 03.02.2011 в 19:29. Причина: Добавлена картинка
kardinal94 вне форума Ответить с цитированием
Старый 03.02.2011, 20:46   #6
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Может проблема из-за того, что я это делаю в потоке? Не в основном, а в другом потоке.
kardinal94 вне форума Ответить с цитированием
Старый 04.02.2011, 21:26   #7
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Неужели никто не может помочь?
kardinal94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с рекурсией Quenchless Помощь студентам 5 28.06.2010 15:53
Проблемы с С# PDV199003 Помощь студентам 0 04.06.2010 14:38
проблемы с if Vergil Общие вопросы C/C++ 8 21.04.2010 21:43
Проблемы с графикой ReM Общие вопросы C/C++ 1 25.03.2009 22:52
проблемы с IE xakzona Помощь студентам 1 16.12.2008 21:53