Funkcja POST DATA IDHttp.

0

Witam. Chciałem zautomatyzować trochę grę we flashu. Dane wysyła PostDatą w xhtmlu. W Firefoxie zainstalowałem "Dane Tamper" który przechwytuje dane Post i Get. Wyłuskałem coś takiego (puszczona wiadomość na głównym chacie "Witam wszystkich"):

 
Host=11.11.11.11
User-Agent=Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language=pl,en-us;q=0.7,en;q=0.3
Accept-Encoding=gzip, deflate
Connection=keep-alive
Referer=http://static13.cdn.ubi.com/costam/live/pl/L4818pl/SWMMO/debug/SWMMO.swf
Content-type=text/xml
Content-length=308
POSTDATA =<body xmlns="http://jabber.org/protocol/httpbind" sid="abc1234" rid="333333"><message to="[email protected]" id="m_116" type="groupchat" from="[email protected]"><body>Witam wszystkich</body><bbmsg playerid="222222" xmlns="bbmsg" playername="denwer" playertag="null" /></message></body>

Wymodziłem taki kod

 
var    param:TStringList;
       valid:boolean;
       url,text:string;
       http:TIDHttp;
begin
http := TIDHttp.Create(nil);
http.HandleRedirects := true;
http.ReadTimeout := 5000;
param:=TStringList.create;
param.Clear;
param.Add('<body xmlns="http://jabber.org/protocol/httpbind" sid="e3ddf2a6" rid="134332">');
param.Add('<message to="[email protected]" id="m_116" type="groupchat" from="[email protected]">');
param.Add('"<body>Witam wszystkich</body><bbmsg playerid="134332" xmlns="bbmsg" playername="denwer" playertag="null" /></message></body>');
valid:=true;
url:='http://31.222.128.215/';
 try
   text:=http.Post(url,param);
 except
  on E:Exception do
   begin
    valid:=false;
   end;
 end;
if valid then
 PostData.Text:= text
else
 PostData.Text := '';
end;

, ale jak naciskam buttona to wypluwa mi komunikat poniżej

<html>
  <head><title>Openfire HTTP Binding Service</title></head>
  <body><font face="Arial, Helvetica"><b>Openfire <a href="http://www.xmpp.org/extensions/xep-0124.html">HTTP Binding</a> Service</b></font></body>
</html> 

Oczywiście ip, strona, rid i sid zmieniłem dla potrzeb postu.
Zauważyłem że rid zwiększa się co jakiś czas. Macie jakiś pomysł co robię nie tak ? Z IDhttp i datapostem nie miałem wcześniej do czynienia.

0

Udało mi się najpierw znaleźć tą grę, a później wymyśliłem taki kod:

var post:Tstringlist; zrodlo:string;
begin
//Te linijki nie są pewnie konieczne, ale są zgodne z tymi które wysyła przeglądarka
  http.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
  http.Request.AcceptLanguage := 'pl,en-us;q=0.7,en;q=0.3';
  http.Request.ContentType := 'text/xml';
  http.Request.Referer := 'http://static13.cdn.ubi.com/settlers_online/live/uk/L4891uk/SWMMO/debug/SWMMO.swf';
  post := tstringlist.Create;
  post.Add('<body rid="810221" xmlns="http://jabber.org/protocol/httpbind" sid="e9c8e1c7" />');  // rid - jakiś numer zapytania? z każdym połączeniem z http-bind zwiększa się o jeden; sid - nr sesji?
  zrodlo := http.Post('http://92.52.120.87/http-bind/', post);
  showmessage(zrodlo);
  post.Free;

Co prawda nie udało mi się jeszcze wysłać wiadomości w czacie, ale udało się pobrać nowe [tylko raz!]... Gra ciągle łączy się z http-bind, więc rid ciągle się zmienia, a jeśli dostanie zły numer od razu wyloguje z gry :P. Żeby wszystko się udało trzeba by samemu obsłużyć logowanie, autoryzację itd.

0

Dzięki za przykładzik. Na pewno jest jakaś możliwość ominięcia tego problemu z RIDem ponieważ widziałem działającego Bota pod tego flasha. Co do logowania to nie może być 2 sesji na tym samym loginie (automatycznie wylogowuje jedną) więc podwójne logowanie (przeglądarka + program) odpada. Wyłuskanie Postów z logowania też nie jest proste bo jak zauważyłeś cały czas lecą śmieci. Nic - będę próbował coś wymodzić później.

1 użytkowników online, w tym zalogowanych: 0, gości: 1