Exakten Browser-Call simulieren

Düark

Aktives Mitglied
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

Java:
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

Bekanntes Mitglied
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

Aktives Mitglied
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?
 

Düark

Aktives Mitglied
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.
 
N

nillehammer

Gast
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

Aktives Mitglied
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T HTTP JAVA Browser Konsolenanfrage(JavaScript) Netzwerkprogrammierung 7
H HTTP Browser-Abrdruck verstehen? Netzwerkprogrammierung 5
Z getInputStream() - Ihr Browser ist veraltet Netzwerkprogrammierung 13
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
Thallius Browser Session selbst gemacht? Netzwerkprogrammierung 3
S HTTP-Requeste von Browser mit Java sniffen? Netzwerkprogrammierung 9
A Socket Browser wirft FM aus Netzwerkprogrammierung 2
J Browser Seite im gleichen Tab Netzwerkprogrammierung 2
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
J Browser-String angeben Netzwerkprogrammierung 5
R Netzwerkspiel im Browser spielbar machen Netzwerkprogrammierung 4
M HTTP response code: 401 ; ?aber im browser ist es abrufbar? Netzwerkprogrammierung 5
P Java Web-Browser Netzwerkprogrammierung 5
S Verbindungen der Browser ermitteln? Netzwerkprogrammierung 9
F Browser identifikation mit .openStream()? Netzwerkprogrammierung 3
T Browser "emulieren" Netzwerkprogrammierung 10
M Download-Manager in System/Browser einbinden Netzwerkprogrammierung 11
J Socket java.net.BindException: The call was cancelled Netzwerkprogrammierung 14
J RMI - Call-By-Object-Reference? Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben