# Exakten Browser-Call simulieren



## Düark (22. Jul 2012)

Hi!

Ich möchte eine Website auslesen habe aber das Problem, dass das Ergebnis nicht mit dem übereinstimmt, was ich mit meinem Browser erreiche.
Cookies hab ich abgestellt, die Website kann damit auch umgehen und generiert eine JSessionID in die URL, die ich in meinem Programm auch berücksichtige.
Das ein Fehler in der URL ist, kann ich auschließen: Bei vergleichen ist nur die JSession-ID und eine weitere id unterschiedlich.
Ich habe daraufhin probiert, mir mit Live-HttpHeaders den Header anzuschauen und bei mir zu simulieren:

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive


```
URL url = new URL(adress);
HttpsURLConnection connection = (HttpsURLConnection) url	.openConnection();
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setRequestProperty("User-Agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1");

connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
connection.setRequestProperty("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3"); 
connection.setRequestProperty("Connection", "keep-alive"); 
connection.setRequestProperty("Accept-Encoding", "gzip, deflate");
```

Trotzdem ist das Ergebnis nicht die gewünschte Seite. Wie kann ich exakt den Firefox-Auftuf simulieren bzw. woran könnte es noch liegen?


----------



## kay73 (22. Jul 2012)

Verstehe ich das richtig? Du rufst eine Webseite mit dem Browser auf, siehst im Browser einen gewissen Inhalt, z. B. eine Zeichenkette. Dann schickst Du eine "Kopie" des Requests über den Socket, parst die Antwort und die Zeichenkette fehlt?

Das kann 100 und eine Ursache haben, am wahrscheinlichsten ist, dass Inhalte per AJAX nachgeladen werden. Hast Du mal HTML-Unit probiert?


----------



## Düark (22. Jul 2012)

Prinzipiell ist das richtig. Im Firefox liefert mir die Seite einen Link, von Java aus sieht das ganze anders aus (unter anderem ohne Link). Habe gerade mal JavaScript ausgeschaltet und es funktioniert trotzdem unter Firefox. Liegt also nicht an Ajax. Cookies sind wie gesagt auch deaktiviert. HTML-Unit werd ich mir mal anschauen, kenne ich bis jetzt noch nicht.
Noch weitere Ideen?


----------



## kay73 (22. Jul 2012)

Wenn der Link öffentlichkeitstauglich ist,  kannst Du ihn ja posten oder PMmen.


----------



## Düark (23. Jul 2012)

Naja, der Link ist im inneren einer Seite, wo man sich einloggen muss, würde also nix nutzen. Hängen neben der JSession-ID noch einige Parameter dran. Aber der Link müsste eigentlich valide sein. Naja, ich werd langsam mal nach nem Workaround suchen, mir fällt gerade nichts weiter ein.


----------



## nillehammer (23. Jul 2012)

Düark hat gesagt.:
			
		

> Bei vergleichen ist nur die JSession-ID *und eine weitere id* unterschiedlich.


Die weitere id *könnte* der Grund sein. Was Du hier mit Deinem Java-Code machst, ist ein sog. Cross-Site Request Forgery. Sprich, Du klaust (in dem Fall dir selbst) eine gültige Session-Id und versuchst damit, weitere Aktionen in der Webanwendung auszuführen. Ein Mittel dagegen ist ein sog. Nonce. Dabei generiert der Server vor jedem Response intern eine zufällige id, die er dann beim *nächsten* Request erwartet. Bekommt der diese nicht, weist er den Request ab und zerstört i.d.R. auch die zugehörige Session.

Versuche also, herauszufinden, ob die von Dir so geheim gehaltene Webanwendung solche Maßnahmen gegen Cross Site Request Forgery hat.


----------



## Düark (23. Jul 2012)

Die Webanwendung ist die Website meiner Uni, also nicht sooo streng geheim 
Das mit dem Cross Site RF ist ein guter Hinweis. Ich gelange nach dem Einloggen auf die Startseite, und da ich mich nicht durch 100 Unterseiten hangeln will, lese ich aus dem ersten Link, den ich finde die JSession ID und die andere ID und baue diese dann in meinen Link ein, der mich auf diese Seite führen soll. 
Aber wenn ich das ganze händisch im Firefox mache, also Quellcode anzeigen, IDs ausschneiden und in den anderen Link einbauen, dann funzt es. Und unter Java ja auch. Nur bei DIESEM einen Link klappt es nicht. Der sollte mich nebenbei bemerkt zu einer XML-Datei führen, wo ich die von mir benötigten Noten-Infos bequem hätte auslesen können. Stattdessen hab ich mich jetzt daran gemacht und extrahier die Infos aus dem HTML- Code der Seite --- Igitt ^^

Danke für eure Tipps, aber ich denke, ich werde jetzt diesen Weg verfolgen, anstatt mich weiter mit den Server-Antworten rumzuärgern.


----------

