Internetseite abrufen (Caching Problem)

Status
Nicht offen für weitere Antworten.
V

Vayu

Gast
Erstmal hallo an Java-forum.org :)

ich war bisher immer nur lesenderweise als Gast hier bei Euch unterwegs, aber jetzt brauche ich auch mal professionelle Hilfe :)

Ich mache folgendes:

Ich entwickle in Eclipse ein kleines plugin, welches Eine website abfragt und die Daten in einem View anzeigt. Das ist alles soweit kein problem.

Die Daten, die abgefragt werden liegen auf einem "fisheye"-server. das ist ein server, der unsere CVS checkins mitloggt. Sodass man zum Beispiel anhand von dem checkin kommentar nach den unter dem Kommentar eingecheckten files suchen kann.

Auf diesen Server muss man sich einloggen, um an die Daten zu kommen, das mache ich so:

Code:
// Create an instance of HttpClient.
        HttpClient client = new HttpClient();

        // Create a method instance.
        GetMethod method = new GetMethod(
            "http://fisheye.example.com:8080/login?username=USER&password=PASSWORD&origUrl=search/cvsroot/?col=path%26csv=true%26comment="
                + someComment );

        // Provide custom retry handler is necessary
        method.getParams()
              .setParameter( HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler( 3, false ) );

        try {
            method.setRequestHeader( "Pragma", "no-cache" );
            method.setRequestHeader( "Cache-Control", "no-store, no-cache, must-revalidate" );
            method.setRequestHeader( "cache-directive", "no-store, no-cache, must-revalidate" );
            method.setRequestHeader( "Expires", "1" );
            method.setRequestHeader( "Cache-store", "no-store" );
            // Execute the method.
            int statusCode = client.executeMethod( method );

            if( statusCode != HttpStatus.SC_OK ) {
                System.err.println( "Method failed: " + method.getStatusLine() );
            }
            // Read the response body.
            String responseBody = method.getResponseBodyAsString();

            return responseBody;

        } catch( HttpException e ) {
            System.err.println( "Fatal protocol violation: " + e.getMessage() );
            e.printStackTrace();
        } catch( IOException e ) {
            System.err.println( "Fatal transport error: " + e.getMessage() );
            e.printStackTrace();
        } finally {
            // Release the connection.
            method.releaseConnection();
            client.getHttpConnectionManager().closeIdleConnections( 1 );
        }
        return "";

Damit komme ich auch an die Daten heran. ALLERDINGS und jetzt kommts, ihr seht evtl auch im Code schon mein Problem

Code:
method.setRequestHeader( "Pragma", "no-cache" );
            method.setRequestHeader( "Cache-Control", "no-store, no-cache, must-revalidate" );
            method.setRequestHeader( "cache-directive", "no-store, no-cache, must-revalidate" );
            method.setRequestHeader( "Expires", "1" );
            method.setRequestHeader( "Cache-store", "no-store" );

ich hab schon recht viel probiert, aber sobald ich einmal die Daten abfrage, ein neues File mit dem kommentar einchecke, kriege ich das bei der nächsten Abfrage nicht mit ausgegeben. wenn ich die url in meinen browser eingebe, bekomme ich aber das korrekte ergebnis angezeigt.

Das lässt für mich nur die vermutung zu, dass Java/Eclipse/Irgendwer diese suchanfrage cached und ich deshalb das alte ergebnis zurückbekomme.

was kann ich noch tun, damit das nicht gecached wird?

Bin verzweifelt :(

gruß und dank

Vayu
 

cburghardt

Mitglied
Vayu hat gesagt.:
method.setRequestHeader( "Pragma", "no-cache" );
method.setRequestHeader( "Cache-Control", "no-store, no-cache, must-revalidate" );
method.setRequestHeader( "cache-directive", "no-store, no-cache, must-revalidate" );
method.setRequestHeader( "Expires", "1" );
method.setRequestHeader( "Cache-store", "no-store" );
Expires ist ein Header den der Server setzt und da steht das Datum drin (oder 0). Also weg damit.
Beschränke dich am Besten auf Cache-Control: no-cache
Welche Header hat denn der Server beim response gesetzt (insbesondere last-modified und expires)?
 
V

Vayu

Gast
ich hab zum schluss einfach nur alles mal ausprobiert :)

im Response body kam Cache-Control: private zurück, sowie ein last-modified was immer ne stunde zurücklag. wenn ich lang genug gewartet hab, dann hab ich auch das neue ergebnis zurückbekommen. Aber dazu musste ich immer so ne knappe stunde warten

und der ändert das auch nicht, egal was ich ich ihm als request hinschicke.
 

cburghardt

Mitglied
Dann würde ich empfehlen mit einem http Trace in deinem Browser (gibts für IE und Firefox) zu überprüfen wo der Unterschied in den Headern liegt, dass ist schnell erledigt.
Nach meinen Infos cached der httpclient nicht (wo sollte er auch...) also kann es nur an einem Proxy dazwischen liegen oder der Server braucht doch einen magischen (nicht konformen) Schalter.
 
V

Vayu

Gast
hm, ok gute idee da schau ich nochmal. melde mich evtl mal wieder dann :)

habe mal für FF Live HTTP Headers benutzt.

Da sehe ich unter Cookie einen zusätzlichen eintrag namens:

cruciblesprefs1="D%3D1211189319525"

dazu finde ich auch unter google nix.

und ein If-Modified-Since: Mon, 19 May 2008 09:28:39 GMT

hmm sollte ich mir echt sonen Datumsstring zurechtbasteln müssen?

ich probiers mal damit. muss nur warten bis mal wieder jemand was eincheckt :p
 
V

Vayu

Gast
ok das hat irgendwie alles nicht funktioniert :(

hab jetzt mal den kompletten requestheader, den ich aus Live HTTP Headers mitgeschnitten habe nachgebaut. bringt trotzdem nichts.

timestamp nutzt auch nichts und Internet-Cache auch nicht o_O

bin echt am Ende mit meinem Latein.
 
V

Vayu

Gast
ok got it. ich hab in ner anderen suchmaske eine option entdeckt, die da heisst refresh=y

wenn ich die im Javaprogramm mit eingebe funzt es. komischerweise hat die mein browser nicht gebraucht o_O

aber nun bin ich glücklich und zufrieden, danke für Eure bemühungen und tipps.

Gruß,

Vayu
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben