View Full Version : Java e protocollo HTTP.
Salve a tutti,
stavo pensando di scrivere una piccola applicazione in Java che controlli l'header di una pagina trasmessa via http periodicamente e segnali con un popup o un trillo se questa è stata aggiornata dal precedente controllo.
L'algoritmo è chiaramente semplice ma non so nulla su quali librerie si usino per mandare messaggi con protocollo http con Java.
Mi sapreste dare qualche dritta?
Forse ho trovato questo:
http://www.innovation.ch/java/HTTPClient/
che ne dite?
in realtà mi va benissimo un codice del tipo:
try {
long lm = 0;
URL url = new URL("http://www.sito.com/pagina.htm");
for (;;) {
URLConnection connection = url.openConnection();
connection.connect();
long nm = connection.getLastModified();
if(lm != nm) {
JOptionPane.showMessageDialog(null, "Sito aggiornato!");
lm = nm;
}
else JOptionPane.showMessageDialog(null, "Sito non aggiornato!");
Thread.sleep(5000);
}
} catch (MalformedURLException e) {}
catch (IOException e) {}
catch (InterruptedException e) {}
Riaccendo questo thread per una questione che mi sta creando dei problemi.
Il mio programmino monitora degli URL e notifica all'utente se sono stati aggiornati andando a recuperare la pagina d'interesse e guardando il campo last modified del protocollo http. Il semplice codice è il seguente:
public boolean isChanged() {
try {
URLConnection connection = getUrl().openConnection();
connection.connect();
Date lm = new Date(connection.getLastModified());
if(lm.compareTo(this.getLastModified()) > 0) {
this.setLastModified(lm);
return true;
}
return false;
} catch (IOException ex) { return false; }
}
Tutto funziona, a meno che non si parli di pagine dinamiche!
Ad esempio quella di hwupgrade...
Nello scrivere queste righe sono giunto alla conclusione che è ovvio quello che mi accade: le pagine dinamiche vengono generate su richiesta e quindi il campo last modified non ha molto senso.
Rigiro la domanda allora: come posso sopperire a questa problematica?
Ovvero, io devo scoprire se la pagina è stata modificata, potrebbe bastare verificarne il content length? Certo non è "chiave primaria" di una pagina, però non vedo soluzioni migliori.
Tuttavia mi chiedo anche se posso rendermi conto in qualche modo di che tipo è una pagina. Questo per utilizzare ancora il vecchio metodo (last modified) per le pagine statiche e il nuovo appena descritto, visto che non infallibile, per quelle dinamiche...
In realtà a pensarci bene mi sembra impossibile :) ad ogni modo grazie dell'attenzione!
Mmmm... non sono espertissimo in problematiche di questo tipo, comunque provo a darti un'idea: potresti memorizzare una specie di "hash" (generato con una funzione abbastanza veloce) della pagina la prima volta che la ottieni (magari basta farlo del solo header) e poi verificare quando la richiedi se è diverso da quello che hai già memorizzato.
non mi sembra una cattiva idea.
Anche se in effetti l'header http, se non ricordo male, contiene la data di quando è stata inviata la risposta e di conseguenza ad ogni richiesta l'header è differente. Potrei comunque basarmi sul contenuto della pagina e farne un hash...ma che funzione di hash sarebbe opportuno usare?
Devo dire che brancolo un po' nel buio e forse è meglio tornare all'idea del content size.
non mi sembra una cattiva idea.
Anche se in effetti l'header http, se non ricordo male, contiene la data di quando è stata inviata la risposta e di conseguenza ad ogni richiesta l'header è differente. Potrei comunque basarmi sul contenuto della pagina e farne un hash...ma che funzione di hash sarebbe opportuno usare?
Devo dire che brancolo un po' nel buio e forse è meglio tornare all'idea del content size.
su hwupgrade ogni volta che ricarichi la pagina hai l'ora corrente, che è ovviamente diversa per le varie richieste.
come sospettavo, mi devo basare sul contenuto della pagina html. Tanto la probababilità che una pagina modificata occupi lo stesso spazio è abbastanza bassa.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.