Просмотр полной версии : [Delphi 2009] Проблема с Indy
crazyserega1994
08.05.2010, 20:39
Добрый вечер! При попытке GET запроса на любую страницу, вместо Русских символом вижу:
'Áûñòðîå ðåäàêòèðîâàíèå'
Из-за этого не возможно спарсить страницу, только английский норм показывает >_>
Добрый вечер! При попытке GET запроса на любую страницу, вместо Русских символом вижу:
'Áûñòðîå ðåäàêòèðîâàíèå'
Из-за этого не возможно спарсить страницу, только английский норм показывает >_>
Utf8toAnsi
crazyserega1994
08.05.2010, 23:49
Есть еще 1 проблема, если в потоке делаю Post запрос, то все команды которые находятся после этого Post'a, не выполняются! В чем может быть проблема?
Скинь часть кода, в которой выполняешь POST запрос.
crazyserega1994
09.05.2010, 00:11
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); уже ничего не работает, хотя пост запрос выполняется(смс приходит)
Все очень просто.
Когда ты делаешь последний запрос (на 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
Все очень просто.
Когда ты делаешь последний запрос (на 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
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;
crazyserega1994
22.05.2010, 23:37
Так попробуй
var
stream : TStringStream; s : string;
begin
stream := TStringStream.Create('', TEncoding.Utf8);
IdHttp1.Get(URL, stream);
s := stream.DataString;
stream.Free;
end;
Так не работает, попробовал TEncoding.Default и заработало, может можно еще как-то сделать? А то слишком муторно :\
GhostOnline
23.05.2010, 14:48
Заверни этот код в отдельную функцию и будет не муторно
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot