HttpRequest - Antwort kryptisch

ch habe ein HttpRequest und verbinde mich zu einem Server.
Setze den Header mittels der setRequestProperty-Methode und klappt auch alles wunderbar.
Der Header antwortet so wie er soll, nur normalerweise bekomme ich als weitere Antwort noch XML-Daten.
Die werden mir jedoch nicht mehr angezeigt sondern es stehen dort einfach kryptische Zeichen.
Also ich weiß dass dort auf jeden Fall XML-Daten rauskommen, denn bis vor einem Jahr war es so (ich update gerade das Programm)
Aber an der Stelle wo die XML-Daten sein sollten sind jetzt krpytische Zeichen mit Symbolen etc, wie kann das sein?
Wie gesagt der Header antwortet genau wie erwartet.

private void connect() {        
        HttpURLConnection   urlConn;
        URL url;
        DataOutputStream  printout;
        DataInputStream  input;
        url = null;
        
        System.out.println("Methode: connect");
        try{
           url = new URL 
               ("http://www.url.net"); //nur als Beispiel
           }
           catch(java.net.MalformedURLException e){}
        // URL connection Aufbau.
        try{
           urlConn = (HttpURLConnection)url.openConnection();           
           urlConn.setDoInput (true);
           urlConn.setDoOutput (true);
           urlConn.setUseCaches (false);
           urlConn.setAllowUserInteraction(true);
           urlConn.setRequestProperty
                 ("Content-Type", "application/x-www-form-urlencoded");
           urlConn.setRequestProperty("Connection", "keep-alive");
           urlConn.setRequestProperty("Content-Length", "553");
           urlConn.setRequestProperty("Accept-Encoding", "gzip, deflate");
           urlConn.setRequestProperty("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
           urlConn.setRequestProperty
                 ("Accept","text/plain,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
           
           printout = new DataOutputStream (urlConn.getOutputStream ());
           
           String content = "Post-Daten" // Auch beispielhaft;
           xhttpreq.send(content);
           
           printout.writeBytes (content);
           
           //Printout freigeben und Verbindung schließen
           printout.flush();
           printout.close();
           // Antwort erhalten
           input = new DataInputStream (urlConn.getInputStream ());
          
           InputStreamReader isr = new InputStreamReader(input);
           String s = null;
           int j = 0;
           char c = 0;
           System.out.println("Hier kommt die XML Rückgabe");
           while ((j = isr.read()) != -1) {
               c = (char) j;
               System.out.print(c);
               s = s + c;
           }
           System.out.println();

Ich habe versucht die Anfrage neu zu schreiben mittels XMLHttpRequest (Dokumentation hier)
Da bekomme ich aber nicht mal eine Antwort im Header, ist immer null.

Habe die Frage auch noch woanders gestellt, falls es also jemand merkt nicht wundern.

Das liegt wahrscheinlich daran, dass du in Zeile 26 angibst, dass du auch gzip-komprimierte Daten haben möchtest. Ich sehe aber keinen Code, um gzip zu entpacken, oder wird das etwa irgendwo transparent gemacht? Sofern der Server dann gzip unterstützt, bekommst du die komprimierten (Binär-)Daten zurück.
Ein schneller Test wäre, aus der Zeile einfach urlConn.setRequestProperty("Accept-Encoding", "deflate"); zu machen.

Der Response-Header müsste doch noch zu lesen sein, oder? Was kommt denn da an?

Tatsache, gar nicht bedacht.
Hab den GZIPInputStream genommen, damit gehts.
Zwar keine XML mehr anscheinend, aber immerhin funktioniert es.
Danke für die Hilfe :slight_smile:
@Murray
Ja der Response Header war auch zu lesen, nur die anderen Daten nicht.

*** Edit ***

Vielleicht nochmal eine grundsätzliche Frage:
Bin immer noch auf der Suche nach der XML, die mir eigentlich übergeben werden sollte xD

Es gibt keinen anderen Datenverkehr außer der Header und das, was ich im Browser angezeigt bekommen kann oder?
Und kann ich irgendwie bei einer GET Anfrage einen HTTP Body bekommen, wie ich ihn bei einer POST-Anfrage auch versenden kann?
Denn sowohl im Quellcode der URL als auch im Header finde ich keine weiteren Informationen.
Früher konnte ich die gesuchte XML auch direkt im Browser anzeigen, also sie wurde halt als Website-quellcode übergeben.

Vielleicht jemand eine Idee?

[QUOTE=breadroader]Vielleicht nochmal eine grundsätzliche Frage:
Bin immer noch auf der Suche nach der XML, die mir eigentlich übergeben werden sollte xD[/QUOTE]
Da kann man dir nicht weiterhelfen, weil das ausschließlich vom Webservice abhängig ist, den du nutzt. Wenn der Server die keine XML zurückgibt, dann kann er es entweder gar nicht, oder man muss andere Parameter in der Anfrage übermitteln, als du es tust.

[QUOTE=breadroader;61394]Es gibt keinen anderen Datenverkehr außer der Header und das, was ich im Browser angezeigt bekommen kann oder?
Und kann ich irgendwie bei einer GET Anfrage einen HTTP Body bekommen, wie ich ihn bei einer POST-Anfrage auch versenden kann?[/QUOTE]
Kann es sein, dass das HTML-Dokument, welches du zurückbekommst eine Fehlermeldung darstellt?
Auch hier gilt wieder: ohne den Service zu kennen, kann man da nichts konkretes zu sagen.

ne das HTML Dokument ist keine Fehlermeldung.
Ruft man das HTML Dokument, so wie ich es bekomme, im Browser auf, wird man an eine URL weitergeleitet.

Obwohl ich nicht weiß, wo genau, denke ich trotzdem es hat dann wohl was mit den Parametern zu tun.
Ich versuche mich bei easports einzuloggen.
Dazu logge ich mich ganz normal über Firefox ein und lese die Anfrage-Header über Live HTTP (Plugin bei Firefox) mit.
Diese versuche ich dann in Java nachzubauen.
Das ganze hat früher auch schon mal geklappt, daher weiß ich halt, dass eigentlich eine XML zurückkommen muss.
Gibt es eventuell ein Plugin, womit ich diese Art von Antworten an meinen Browser auch irgendwie mitlesen kann, abgesehen von den Header?
Dann könnte ich herausfinden, ob die XML denn noch wirklich dort kommen müsste.

Wenn du http://www.easports.com/ meinst, dann ist es doch gut möglich, dass sich in der Zwischenzeit der Seitenaufbau geändert hat. Wenn ich mich mit Pseudodaten versuche einzuloggen, bekomme ich als erstes auch ein 302er-Redirect.
Und sicherlich musst du dich dann auch mit Cookiemanagement beschäftigen. Um Webseiten zu parsen, bietet sich auch immer HttpClient an. Die Bibliothek nimmt einem die meisten schwierigen Aufgaben ab. Bei den Beispielen befindet sich auch eines, das die transparente Behandlung von gzip demonstriert (das Custom protocol interceptors Beispiel). Weiterhin gibt es eines, das einen formularbasierten Login mit Cookieverwaltung demonstriert (Form based logon).
Ich möchte dir damit jetzt nicht sagen, dass es mit den Standardfunktionen, die Java bereits mitliefert, nicht funktioniert. Aber man spart sich mit HttpClient einen Haufen Arbeit.

Wie man mit Firefox mehr als die Header mitlesen kann, weiß ich leider nicht. Ich hatte auch immer “Live HTTP Headers” verwendet und meine mich zu erinnern, dass man dort auch die Antwortdaten ansehen konnte (in dem Fenster, in dem auch Replay möglich ist). Chrome kann den Netzwerktraffic auch ohne Erweiterungen mitlesen und anzeigen.

ok, wie geht das denn in Chrome?
Mit Cookies und so muss ich mich schon auseinandersetzen, klappt auch recht gut.
Aber ja vielleicht gucke ich es mir nochmal an. Auf jeden Fall Danke für die Hinweise

In Chrome ganz einfach ein Rechtsklick irgendwo in die Seite, dann im Kontextmenü “Inspect Element” (ganz unten) und dann auf den “Network”-Tab wechseln. Dort werden dann alle Requests aufgezeichnet, Details gibt es, sobald man ein Request anwählt.
Wenn Weiterleitungen im Spiel sind, ist die Funktion “Preserve Log upon Navigation”, die ganz unten in der “Statuszeile” zu finden ist, äußerst hilfreich.

Super Danke :slight_smile:
Ich versuche mich nochmal ran.