Moin Moin!
Um Daten aus einem (Space) Browsergame auszulesen habe ich mal vor einiger Zeit in C# mit Hilfe der webBrowser Komponente ein Programm geschrieben, das das Universum automatisch nach Spielern durchsucht und damit die Daten für eine Allianzmemberliste und dergleichen in eine DB speichert.
Da das recht lang dauert und man dafür ein Programm laufen lassen muss hatte ich vor ein Java Konsolenprogramm zu schreiben, das auf einem Server einfach einmal täglich das ganze abklappert.
Mein Problem dabei ist das einloggen.
hier spielt sich der Großteil ab. Auf meiner eigenen HP kann ich mich damit locker anmelden, auch auf einer test.php werden mir die korrekten POST Parameter angezeigt (habe sie mit den POST Parameter des original Formulars verglichen) , nur bei dem Spiel lande ich wieder auf der Loginseite.
Das sagt mir, dass dort eine Art Filter oder Erkennung eingebaut ist. Aber worin unterscheidet sich die urlconnection von einem normalen Browser, wie Opera, FF, oder der webBrowser Komponente in .NET?
Ich habe schon versucht den Header des Requests anzupassen, um einen Browser vorzugaukeln, dabei habe ich vom Opera aus das selbe Loginformular an meine test.php geschickt und alle Werte aus der $_SERVER Variable die mir sinnvoll erschienen übernommen:
Aber kein Erfolg.
Hat jemand damit Erfahrung oder gibt es was, was ich übersehen hab?
oder sollte ich lieber in einem PHP Forum nachfragen?
mfg tt
Um Daten aus einem (Space) Browsergame auszulesen habe ich mal vor einiger Zeit in C# mit Hilfe der webBrowser Komponente ein Programm geschrieben, das das Universum automatisch nach Spielern durchsucht und damit die Daten für eine Allianzmemberliste und dergleichen in eine DB speichert.
Da das recht lang dauert und man dafür ein Programm laufen lassen muss hatte ich vor ein Java Konsolenprogramm zu schreiben, das auf einem Server einfach einmal täglich das ganze abklappert.
Mein Problem dabei ist das einloggen.
Java:
public static String sendPostRequest(String urlstr, String data) {
try {
System.out.println("Cookie: " + cvalue);
URL url = new URL(urlstr);
URLConnection conn = url.openConnection();
conn.setRequestProperty("Cookie", cvalue);
conn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(conn
.getOutputStream());
writer.write(data);
writer.flush();
StringBuffer answer = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
answer.append(line + System.getProperty("line.separator"));
}
writer.close();
reader.close();
Map<String, List<String>> headers = conn.getHeaderFields();
List<String> values = headers.get("Set-Cookie");
String cookieValue = null;
if(values != null)
{
for (Iterator<String> iter = values.iterator(); iter.hasNext(); ) {
String v = iter.next();
if (cookieValue == null)
cookieValue = v;
else
cookieValue = cookieValue + ";" + v;
}
}
cvalue = cookieValue;
return answer.toString();
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
return "";
}
hier spielt sich der Großteil ab. Auf meiner eigenen HP kann ich mich damit locker anmelden, auch auf einer test.php werden mir die korrekten POST Parameter angezeigt (habe sie mit den POST Parameter des original Formulars verglichen) , nur bei dem Spiel lande ich wieder auf der Loginseite.
Das sagt mir, dass dort eine Art Filter oder Erkennung eingebaut ist. Aber worin unterscheidet sich die urlconnection von einem normalen Browser, wie Opera, FF, oder der webBrowser Komponente in .NET?
Ich habe schon versucht den Header des Requests anzupassen, um einen Browser vorzugaukeln, dabei habe ich vom Opera aus das selbe Loginformular an meine test.php geschickt und alle Werte aus der $_SERVER Variable die mir sinnvoll erschienen übernommen:
Java:
conn.setRequestProperty("Accept", "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1");
conn.setRequestProperty("Accept-Charset", "iso-8859-1, utf-8, utf-16, *;q=0.1");
conn.setRequestProperty("Accept-Encoding", "deflate, gzip, x-gzip, identity, *;q=0");
conn.setRequestProperty("Accept-Language", "de-DE,de;q=0.9,en;q=0.8");
conn.setRequestProperty("Cache-Control", "no-cache");
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("TE", "deflate, gzip, chunked, identity, trailers");
conn.setRequestProperty("User-Agent", "Opera/9.80 (Windows NT 6.1; U; de) Presto/2.6.22 Version/10.50");
Aber kein Erfolg.
Hat jemand damit Erfahrung oder gibt es was, was ich übersehen hab?
oder sollte ich lieber in einem PHP Forum nachfragen?
mfg tt