Добрый вечер! При попытке GET запроса на любую страницу, вместо Русских символом вижу: Code: 'Áûñòðîå ðåäàêòèðîâàíèå' Из-за этого не возможно спарсить страницу, только английский норм показывает >_>
Есть еще 1 проблема, если в потоке делаю Post запрос, то все команды которые находятся после этого Post'a, не выполняются! В чем может быть проблема?
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); уже ничего не работает, хотя пост запрос выполняется(смс приходит)
Все очень просто. Когда ты делаешь последний запрос (на http://www.mts.com.ua/back/modules/sms/db_sms.php), сервак отвечает тебе кодом 302, благодаря чему Indy генерит исключение, и программа сразу же переходит к блоку finally. Решения: 1) Попробуй заменить строчку Code: http.HandleRedirects:=false; на Code: HTTP.HandleRedirects := True; 2) Если предыдущий вариант не поможет, то попробуй убрать блок Code: try .. finally .. end;
Когда появилась ошибка, я начал эксперементировать с Handleredirects, и результат был нулевой, просто забыл поставить на true, но я решил эту проблему, обьявив 3 tidhttp, создал кукимененджер, и соедил кукименеджер с http и http3, пост отправляю с http3, и все работает, хотя и быдло код :3
Так попробуй var stream : TStringStream; s : string; begin stream := TStringStream.Create('', TEncoding.Utf8); IdHttp1.Get(URL, stream); s := stream.DataString; stream.Free; end;
Так не работает, попробовал TEncoding.Default и заработало, может можно еще как-то сделать? А то слишком муторно :\