PDA

View Full Version : [C/C++]Aiuto progetto!!!!


Label84
12-05-2006, 21:08
Ciao a tutti!!!
Sono nuova, ed ho subito una domanda da farvi....
Devo scrivere un programma che prende in ingresso una lista di URL e avvisa quando uno di questi viene aggiornato...
la mia domanda è: esiste una funzione che prende in ingresso un url e riesce a leggerne l'header?? Io non sono proprio riuscita a trovare nulla!!! :help:
grazie a tutti coloro che mi aiuteranno!!! :)

wisher
12-05-2006, 21:19
penso che ti basti farti mandare l'html dal webserver, tenere in memoria l'ultima copia e poi confrontare la copia attuale con la precedente

Label84
13-05-2006, 09:38
Grazie wisher!!!
ti dico cosa avevo in mente di fare....
io pensavo di farmi mandare l'header dell'URL, e confrontare la data data di ultima modifica con quella corrente,,,,
(è questo che intendevi tu??)
il mio problema è che non so come "farmi mandare l'header"... sarà un problema stupido....ma non ci salto fuori :cry: e purtroppo non ho nemmeno molto tempo....
grazie a tutti...e buona giornata!!!!

wisher
13-05-2006, 09:48
per ottenere un file da un webserver (cui ti devi essere connesa) devi mandare con una send una stringa composta da
"GET "+nome_file_da_scaricare+" HTTP/1.0\r\n\r\n"
poi mettiti in recv e ottieni l'html...
se riesci a leggere l'header tanto meglio, altrimenti io ti consigliavo con una soluzione poco elegante di salvare direttamente il file e poi controllare che ogni singolo char del file nuovo sia uguale al char corrispondente del file vecchio

wisher
13-05-2006, 10:22
ti faccio un esempio in python, spero si capisca, come linguaggio è molto semplice

import socket
HOST = "www.google.com"
PORT = 80
connessione = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connessione.connect((HOST, PORT))
connessione.send("GET / HTTP/1.0 \n\n")
data = connessione.recv(1024)
msg=data
while data!="":
data = connessione.recv(1024)
msg = msg+data
print msg
connessione.close()

in questo modo ottengo

HTTP/1.0 302 Found

Location: http://www.google.it/

Cache-Control: private

Set-Cookie: PREF=ID=00f576cd71567ba6:TM=1147511954:LM=1147511954:S=V5I9Bqd-VpBqDT70; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com

Content-Type: text/html

Server: GWS/2.1

Content-Length: 218

Date: Sat, 13 May 2006 09:19:14 GMT

Connection: Keep-Alive



<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.it/">here</A>.

</BODY></HTML>


l'unica cosa che resta da fare è separere l'header del messaggio dal codice html vero e proprio

wisher
13-05-2006, 10:41
più precisamente la parte dell'header del trasferimento e i dati a noi utili sono separati dalla sequenza

"\r\n\r\n"

Label84
13-05-2006, 19:54
Grazie mille!!!! Ora provo a buttare giù qualcosa da sola....nel caso ti richiamo!!!! :p ...buona serata!

Label84
18-05-2006, 21:37
Scusa wisher, ma sono ancora qui....e ancora + in crisi!!!
A parte il fatto che le socket in c sono un pò + incasinate che nel tuo esempio, in realtà ho un problema di base:
I metodi HTTP!!!
Ho notato che con il metodo "GET / HTTP/1.0 \n\n"
spesso nell'header che ottengo, non è presente il campo "last-m2odified" (come nel tuo esempio)..così il mio algoritmo è andato a farsi benedire!!!
Da quello che ho studiato c sarebbe il meto GET condizionato:
"GET / HTTP/1.0 \n\n
If-Modified-SInce: data"

che dovrebberitornare un codice 304 senza body,nel caso il documento non è stato modificato dalla data che gli ho mandato, ed una risposta normale(come una get semplice) nel caso ci siano state modifiche.....
il problema è che ho provato con un pò di siti (con putty) e a volte mi risponde con un codice 304, a volte con un codice 302 che nn so cosa significa, a volte mi da" 200, ok" senza body, a volte "200 con body" e altre volte ancora mi dice che il documento è stato aggiornato anche se ci metto una data "futura"!!!!
insomma nn so come interpretare le risposte....e di conseguenza nn so + come impostare il programma!!!

qualcuno riesce ad aiutarmi???
sono sull'orlo di una crisi di nervi!!!
grazie in anticipo!!

Label84
19-05-2006, 10:29
Nessuno ha qualche suggerimento???? please!!!!
sono bloccata!!

:muro: :muro: :muro: :muro: