Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi 2009] Проблема с Indy (https://forum.antichat.xyz/showthread.php?t=202660)

crazyserega1994 08.05.2010 20:39

[Delphi 2009] Проблема с Indy
 
Добрый вечер! При попытке GET запроса на любую страницу, вместо Русских символом вижу:
Код:

'Áûñòðîå ðåäàêòèðîâàíèå'
Из-за этого не возможно спарсить страницу, только английский норм показывает >_>

TrueBit 08.05.2010 21:35

Цитата:

Сообщение от crazyserega1994
Добрый вечер! При попытке GET запроса на любую страницу, вместо Русских символом вижу:
Код:

'Áûñòðîå ðåäàêòèðîâàíèå'
Из-за этого не возможно спарсить страницу, только английский норм показывает >_>

Utf8toAnsi

crazyserega1994 08.05.2010 23:49

Есть еще 1 проблема, если в потоке делаю Post запрос, то все команды которые находятся после этого Post'a, не выполняются! В чем может быть проблема?

Chrome~ 08.05.2010 23:52

Скинь часть кода, в которой выполняешь POST запрос.

crazyserega1994 09.05.2010 00:11

Код HTML:

procedure Thread.SendSMS;
var data:tstringlist;
    page:string;
    Stream:tmemorystream;
    param:TidMultiPartFormDataStream;
    i:integer;
    temp:string;
    hid:string;
    now:TDateTime;
    code1:string;
    number1:string;
    HTTP:tidhttp;
    HTTP2:tidhttp;
begin
if GetNumber = true then
begin
code1:=code;
number1:=number;
form1.sMemo2.Lines.Add(code1);
form1.sMemo2.Lines.Add(number1);
now:=time;
HTTP:=tidhttp.Create(nil);
HTTP2:=tidhttp.Create(nil);
HTTP2.AllowCookies:=true;
http2.HandleRedirects:=true;
param:=TidMultiPartFormDataStream.Create;
Stream:=tmemorystream.Create;
data:=tstringlist.Create;
HTTP.AllowCookies:=true;
http.HandleRedirects:=false;
try
page:=http.Get('http://www.mts.com.ua/ukr/sendsms.php');
delete(page,1,pos('captcha.php',page)+11);
page:=copy(page,1,pos('"',page)-1);
hid:=page;
now:=time;
form1.sMemo2.Lines.Add('['+Timetostr(now)+']: Получаем капчу...');
http.Get('http://www.mts.com.ua/back/modules/golden/captcha.php?'+page,stream);
now:=time;
form1.sMemo2.Lines.Add('['+Timetostr(now)+']: Капча полученна, отправляем капчу...');
stream.Position:=0;
stream.SaveToFile(ExtractFilePath( Application.ExeName )+hid+'.jpeg');
param.AddFormField('method','post');
param.AddFormField('key',form1.sEdit1.Text);
param.AddFile('file',ExtractFilePath( Application.ExeName )+hid+'.jpeg','image/jpeg');
page:=http2.Post('http://antigate.com/in.php',param);
delete(page,1,3);
for i:=1 to 100 do
begin
  sleep(1000);
  temp:=http2.Get('http://antigate.com/res.php?key='+form1.sEdit1.Text+'&action=get&id='+page);
  if pos('OK|',temp) > 0 then
  begin
    delete(temp,1,3);
    break;
  end;
  if pos('ERROR',temp) > 0 then begin
  now:=time;
  form1.sMemo2.Lines.Add('['+Timetostr(now)+']: Произошла ошибка на сервие AntiCaptcha: '+ temp);
  Exit;
  end;
end;
now:=time;
form1.sMemo2.Lines.Add('['+Timetostr(now)+']: Капча разгаданна, SMS отправленно!');
data.Add('script=/ukr/sendsms.php');
data.Add('sms_tag_id=3');
data.Add('network1=38'+code1);
data.Add('phone1='+number1);
data.Add('message='+form1.sMemo1.Text);
data.Add('lang=lat');
data.Add('captcha='+temp);
http.Post('http://www.mts.com.ua/back/modules/sms/db_sms.php',data);
form1.smemo2.Lines.Add('LOL');
finally
  data.Free;
  http.Free;
  stream.Free;
  param.Free;
  http2.Free;
  DeleteFile(ExtractFilePath( Application.ExeName )+hid+'.jpeg');
end;
end;
end;

После строчки http.Post('http://www.mts.com.ua/back/modules/sms/db_sms.php',data); уже ничего не работает, хотя пост запрос выполняется(смс приходит)

Chrome~ 09.05.2010 15:35

Все очень просто.
Когда ты делаешь последний запрос (на http://www.mts.com.ua/back/modules/sms/db_sms.php), сервак отвечает тебе кодом 302, благодаря чему Indy генерит исключение, и программа сразу же переходит к блоку finally.

Решения:
1) Попробуй заменить строчку
Код:

http.HandleRedirects:=false;
на
Код:

HTTP.HandleRedirects := True;
2) Если предыдущий вариант не поможет, то попробуй убрать блок
Код:

try
..
finally
..
end;


GhostOnline 09.05.2010 16:39

Цитата:

Если предыдущий вариант не поможет, то попробуй убрать блок
Это тоже не поможет, т.к. исключение не обрабатывается.
Надо обернуть запрос в try except end;

crazyserega1994 09.05.2010 18:04

Цитата:

Сообщение от Chrome~
Все очень просто.
Когда ты делаешь последний запрос (на http://www.mts.com.ua/back/modules/sms/db_sms.php), сервак отвечает тебе кодом 302, благодаря чему Indy генерит исключение, и программа сразу же переходит к блоку finally.

Решения:
1) Попробуй заменить строчку
Код:

http.HandleRedirects:=false;
на
Код:

HTTP.HandleRedirects := True;
2) Если предыдущий вариант не поможет, то попробуй убрать блок
Код:

try
..
finally
..
end;


Когда появилась ошибка, я начал эксперементировать с Handleredirects, и результат был нулевой, просто забыл поставить на true, но я решил эту проблему, обьявив 3 tidhttp, создал кукимененджер, и соедил кукименеджер с http и http3, пост отправляю с http3, и все работает, хотя и быдло код :3

crazyserega1994 22.05.2010 17:04

Цитата:

Сообщение от TrueBit
Utf8toAnsi

Не помогло

GhostOnline 22.05.2010 17:34

Так попробуй
var
stream : TStringStream; s : string;
begin
stream := TStringStream.Create('', TEncoding.Utf8);
IdHttp1.Get(URL, stream);
s := stream.DataString;
stream.Free;
end;


Время: 13:25