|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2008
Città: Roma
Messaggi: 1382
|
[C] Come scaricare un file tramite http?
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! ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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. |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Sep 2008
Città: Roma
Messaggi: 1382
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
Addirittura a mano? Librerie non ne conosco, ma secondo me si trovano... Ma male che vada mi uso wget con una chiamata al sistema
![]() |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
link utile: http://msdn.microsoft.com/en-us/libr...22(VS.85).aspx |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
puoi usare libcurl
__________________
![]() |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Puoi chiudere il C e aprire qualcosa che lo fa in 1 o 2 righe...
Scherzo. Voto per le librerie esterne gia' fatte.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
ma anche no invece
![]() 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 ![]() ormai sono pochissimi i programmi che bisognerebbe realizzare necessariamente in C++, e anche in quei casi il C non ha senso per definizione. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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. |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Sep 2008
Città: Roma
Messaggi: 1382
|
Quote:
![]() 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. ![]() |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
libcurl è portabile su più o meno ogni sistema operativo
![]() |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
scusate l'OT ![]() |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Quote:
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Sep 2008
Città: Roma
Messaggi: 1382
|
Quote:
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)... ![]() |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non manca niente...devi fare appunto una richiesta con GET e ricevere i dati
![]() 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 ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:27.