пишу бота для форума умеющего создавать сообщения / темы возникла проблема: при попытке создать тему / пост (через ПОСТ запрос) в ответ приходит страница с сообщением "заполните поля: тема и сообщение" что можно с этим сделать и откуда в сервера в такая инфа?? с кукив??
а как их заполнить? я отправляй ПОСТ запросы TIdHttp ... в ПОСТ есть все что надо ... (Все делаю так же как показывает сниффер)
Кинь на форму компонент IdCookieManager (Indy) а в свойствах компонента TIdHttp пропиши IdCookieManager
весь код около 350 строк ... изложения три функции Code: procedure THackUACache.[B]GetTopicParam[/B](var TopicParam: TNewTopicParam); function GetStr(str,Bgn:string):string; const Fend :string='" />'; begin Result:=GetContent(str,bgn,fend); end; var str:string; const URL :string='http://hackua.com/newthread.php?do=newthread&f='; Fs :string='<input type="hidden" name="s" value="'; Fsecuritytoken:string='<input type="hidden" name="securitytoken" value="'; Fdo :string='<input type="hidden" name="do" value="'; Fposthash :string='<input type="hidden" name="posthash" value="'; Fpoststarttime:string='<input type="hidden" name="poststarttime" value="'; Floggedinuser :string='<input type="hidden" name="loggedinuser" value="'; const Awysiwyg :string='0'; Aiconid :string='0'; Aparseurl :string='1'; Aemailupdate :string='9999'; Apolloptions :string='4'; Asbutton :string='%C4%EE%E4%E0%F2%E8+%ED%EE%E2%F3+%F2%E5%EC%F3'; begin str:=FHttp.Get(URL+TopicParam.f); TopicParam.URL := URL+TopicParam.f; TopicParam.wysiwyg := Awysiwyg; TopicParam.iconid := Aiconid; TopicParam.s := GetStr(str,Fs); TopicParam.securitytoken:= GetStr(str,Fsecuritytoken); TopicParam.Fdo := GetStr(str,Fdo); TopicParam.posthash := GetStr(str,Fposthash); TopicParam.poststarttime:= GetStr(str,Fpoststarttime); TopicParam.loggedinuser := GetStr(str,Floggedinuser); TopicParam.sbutton := Asbutton; TopicParam.parseurl := Aparseurl; TopicParam.emailupdate := Aemailupdate; TopicParam.polloptions := Apolloptions; end; function THackUACache.[B]ConvertTopicPost[/B](const TopicParam: TNewTopicParam): TStrings; begin Result:=TStringList.Create; with TopicParam do Result.text:= 'POSTDATA=subject='+POSTDATA+ '&message='+ Fmessage+ '&wysiwyg='+ wysiwyg+ '&iconid='+ iconid+ '&s='+ s+ '&securitytoken='+securitytoken+ '&f='+ f+ '&do='+ Fdo+ '&posthash='+ posthash+ '&poststarttime='+poststarttime+ '&loggedinuser='+ loggedinuser+ '&sbutton='+ sbutton+ '&parseurl='+ parseurl+ '&emailupdate='+ emailupdate+ '&polloptions='+ polloptions; //result.Text:=StringReplace(result.Text,'&',#13#10,[rfReplaceAll]); end; function THackUACache.[B]UpTopic[/B](CashURL: string): boolean; var code :PChar; PostParam :TNewTopicParam; param :TPostParam; begin code:=pchar(FHttp.Get(CashURL)); param:=GetTopic(code); PostParam:=GetTopicParam(param.f); PostParam.POSTDATA := ConvertCodeToSrc(param.Title); PostParam.Fmessage := '[COLOR="DarkOrange"][B]Автор: '+param.User+ '[/B][/COLOR]%0D%0A%0D%0A'+param.Content; //FHttp.AllowCookies:=false; //FHttp.HandleRedirects:=false; //FHttp.CookieManager.AddCookie('Cookie=__utma=7521707.1154547405.1280527117.1281129295.1281133980.23; __utmz=7521707.1280763724.7.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=cache:xviTQSfV_H8J:hackua.com/showthread.php%3Ft%3D1775%20site:Hackua.com; __utmc=75'+'21707; __utmb=7521707.8.10.1281133980; bbsessionhash=89a5a8bda62e99ea838f652b7dd8ec2b; bblastvisit=1281134092; bblastactivit'+'y=0; bbforum_view=a415af04773e860338bccfa8285cebd61d729350a-1-%7Bi-90_i-1281135486_%7D; bbuserid=572; bbpassword=84f05f513fdd6af264c3fb5c539a99b1',TIdURI.Create('')); with TStringList.Create do begin Text:= FHttp.Post(PostParam.URL,ConvertTopicPOST(PostParam)); // FHttp.Post(PostParam.URL,convertTopicPost(PostParam)); SaveToFile('ff.txt'); convertTopicPost(PostParam).SaveToFile('fff.txt'); end; end;
'POSTDATA=subject='+POSTDATA+ Может в этом дело? Попробуй так: 'subject='+POSTDATA+ И вот эту строчку: //result.Text:=StringReplace(result.Text,'&',#13#10,[rfReplaceAll]); Раскоменть обратно. З.Ы. С инди дано дела не имел, могу ошибаться
'POSTDATA=subject='+POSTDATA+ в снифере так ... можно будет попробуваты и твой вариант ... проблема в том что сайт для которого я писал эту прогу временно не работает ... Раскоменть пробыл ...
Если отсылается не в той кодировке, тогда думать, снифать, сравнивать, опять думать... А если присылается не в той, тогда UTF8Decode();
Хех, родимый, с этого и стоило начать) В 2010 дельфи все строки по умолчанию юникодные. Так что преобразовывай юникод а анси
как? Utf8ToString (или ToAnsiString) не помогает ... и TStrings использует не Анси через TStringStream почему вообще нифига не получается ... (Сервер не понимает что у него хотят)