 
View Full Version : [C] Come scaricare un file tramite http?
Damage92
04-11-2009, 16:44
Salve
devo scaricare una pagina web (è un feed rss, quindi tramite http) da una applicazione scritta in C. Per ora mi sono "appoggiato" a wget, volevo capire se posso sostituirlo "facilmente" con i socket (che ancora non so usare) oppure è un affare troppo complesso ed è più semplice utilizzare librerie esterne.
Grazie! :)
Semplicissimo non è, ma si fa abbastanza facilmente.
Devi prima di tutto studiarti come funziona il protocollo HTTP: http://www.w3.org/Protocols/rfc2616/rfc2616.html
Nota che una richiesta semplice HTTP/1.1 potrebbe anche non essere sufficiente, ma potrebbero anche essere necessari alcuni header.
Damage92
05-11-2009, 14:56
Semplicissimo non è, ma si fa abbastanza facilmente.
Devi prima di tutto studiarti come funziona il protocollo HTTP: http://www.w3.org/Protocols/rfc2616/rfc2616.html
Nota che una richiesta semplice HTTP/1.1 potrebbe anche non essere sufficiente, ma potrebbero anche essere necessari alcuni header.
Grazie mille, casomai dovessi avere bisogno di aiuto so dove chiedere ;)
Addirittura a mano? Librerie non ne conosco, ma secondo me si trovano... Ma male che vada mi uso wget con una chiamata al sistema :D
Salve
devo scaricare una pagina web (è un feed rss, quindi tramite http) da una applicazione scritta in C. Per ora mi sono "appoggiato" a wget, volevo capire se posso sostituirlo "facilmente" con i socket (che ancora non so usare) oppure è un affare troppo complesso ed è più semplice utilizzare librerie esterne.
Grazie! :) se sei su Windows non ha senso usare i sockets a tale scopo, usa Windows Internet: http://msdn.microsoft.com/en-us/library/aa383630(VS.85).aspx
link utile: http://msdn.microsoft.com/en-us/library/aa384322(VS.85).aspx
Puoi chiudere il C e aprire qualcosa che lo fa in 1 o 2 righe...
Scherzo. Voto per le librerie esterne gia' fatte.
Scherzo. ma anche no invece :D
non so che programma debba realizzare Damage92 ma é estremamente probabile che il C# sia x volte piu indicato con x divergente al crescere delle considerazioni (cioé si ha che per ogni livello alpha di convenienza grande a piacere x é strettamente maggiore di alpha da una certa considerazione in poi :asd: ).
ormai sono pochissimi i programmi che bisognerebbe realizzare necessariamente in C++, e anche in quei casi il C non ha senso per definizione.
Mi sembra che Damage92 abbia fatto una richiesta ben precisa. Credo sia inutile suggerirgli di cambiare linguaggio, ricordiamoci che voleva modificare il codice di una applicazione già fatta.
Prima di tutto è utile dal punto di vista culturale conoscere sia HTTP che come implementarlo sui socket, poi può sempre ricorrere a soluzioni più sbrigative (libcurl per il C è perfetta) anche dopo, quando sarà riuscito a farsi un'idea di quello che vuol dire implementare qualcosa tramite i socket.
Damage92
06-11-2009, 15:37
Mi sembra che Damage92 abbia fatto una richiesta ben precisa. Credo sia inutile suggerirgli di cambiare linguaggio, ricordiamoci che voleva modificare il codice di una applicazione già fatta.
Prima di tutto è utile dal punto di vista culturale conoscere sia HTTP che come implementarlo sui socket, poi può sempre ricorrere a soluzioni più sbrigative (libcurl per il C è perfetta) anche dopo, quando sarà riuscito a farsi un'idea di quello che vuol dire implementare qualcosa tramite i socket.
In effetti mi sembrava utile cogliere l'occasione per imparare i socket, solo temevo che fosse un'impresa implementare http :D 
Non so se è una buona idea affidarsi ad una libreria, perché volevo che l'applicazione fosse portabile. L'ho sviluppata su linux, ma volevo compilarla anche su win e magari su Mac.
Adesso usa proprio wget, come dice Mesh89. ;)
libcurl è portabile su più o meno ogni sistema operativo ;)
Mi sembra che Damage92 abbia fatto una richiesta ben precisa. Credo sia inutile suggerirgli di cambiare linguaggio, ricordiamoci che voleva modificare il codice di una applicazione già fatta. assolutamente si, domando scusa; non ho resistito allo scrivere il precedente post perché ogni giorno che passa e ogni giorno che ci si allontana dai tempi in cui é nato il C mi lascio sbalordire sempre di piu dal fenomeno di inerzia tecnologica: veramente non capisco perché la gente lo usi... non ho mai sentito di qualcuno che lo usasse in un contesto realmente legacy!
scusate l'OT :)
assolutamente si, domando scusa; non ho resistito allo scrivere il precedente post perché ogni giorno che passa e ogni giorno che ci si allontana dai tempi in cui é nato il C mi lascio sbalordire sempre di piu dal fenomeno di inerzia tecnologica: veramente non capisco perché la gente lo usi... non ho mai sentito di qualcuno che lo usasse in un contesto realmente legacy!
scusate l'OT :)
Il C è ancora parecchio usato al giorno d'oggi...
Damage92
06-11-2009, 17:51
assolutamente si, domando scusa; non ho resistito allo scrivere il precedente post perché ogni giorno che passa e ogni giorno che ci si allontana dai tempi in cui é nato il C mi lascio sbalordire sempre di piu dal fenomeno di inerzia tecnologica: veramente non capisco perché la gente lo usi... non ho mai sentito di qualcuno che lo usasse in un contesto realmente legacy!
scusate l'OT :)
Be, io ho imparato il C perché era l'unico libro di programmazione che avevo "ereditato" da mia sorella e mio fratello (che sono programmatori).
Poi penso che sia ottimo a scopo didattico, o sbaglio?
Anche se poi in effetti, a livello di programmi applicativi, ti complica la vita, forse solo se lavori a basso livello (driver, s.o.) è il meglio che puoi scegliere.
Per tornare IT, ho trovato sulla rete il pezzo di codice che mi serviva (non è che l'abbia capito proprio tutto).
Alla fine bastava aprire il socket, inviare la richiesta GET con write() e leggere la risposta con read().  O manca qualcosa di importante?
C'è solo qualche problemino con i dati divisi in più "sessioni" (chunked)... :D
Non manca niente...devi fare appunto una richiesta con GET e ricevere i dati :D
Il formato preciso della richiesta lo trovi nel file dell'RFC. Mi raccomando chiudi la richiesta con CRLF (\r\n in C).
Attenzione a non aprire il vaso di pandora con i discorsi che hai fatto sopra :asd:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.