Newsgroup: it.comp.lang.visual-basic
Titolo: Come scaricare un immagine dal web?

Ciao a tutti!
come posso scaricare delle immagini da internet tramite VB?
Sto' provando con WebBrowser ma non ci riesco!
La procedura dovrebbe essere automatica e trasparente...
Questo e' quello che dovrebbe fare +/-:
VB -> (Routine che si collega ad un sito) -> Individua l'immagine x.gif ->
salva l'immagine x.gif con il nome cartella.gif
L'utente naturalmente non si dovrebbe accorgere di dove viene preso il file,
se viene visualizzato o no mentre lo scarica non cambia nulla... Solo che
non so' come fare :P
Grazie per l'aiuto e ciao!
--
Massimo "Red Foxy" Ciccio'
Home Page: 
http://www.redfoxy.go.to/
Web Master di:
 - Libreria Ciofalo: 
http://www.ciofalo.it
 - Quantum Leap: 
http://ql.programmazione.it
.<-------- Se ricevo spam denuncio l'autore al server ------->.
.o0 ------------------------------------------------------- 0o.
.o0 --------- Dentro ognuno di noi c'e' un animale, ------- 0o.
.o0 ----------- sta' a noi scoprirlo e domarlo ------------ 0o.
.o0 ------------------------------------------------------- 0o.
.o0 --- Non c'e' uomo che non abbia paura dell'animale, --- 0o.
.o0 --------- non esiste uomo che non sia animale --------- 0o.
.o0 ------------------------------------------------------- 0o.
.o0 ------------------------------------------- Red Foxy -- 0o.

 Grazie per l'aiuto e ciao!
Basta usare la winsock.OCX (le socket)
Ti connetti al server sulla porta 80.
gli invii il comando "GET /percorso/nomefile.gif HTTP/1.0" & chr$(10) &
chr$(10)
e ti ritorna il file che tu salverai su disco (attento che in testa dovrebbe
esserci la teststa HTTP che va scartata).
La connessione termina automaticamente a fine trasmissione del file.
Puoi anche provare con uno stupido TELNET a manina, scrivendo "GET /.. . ."
(il protocollo HTTP a conti fatti č una idiozia tanto č banale)
 /\/\/\/\/\/\/\/\/\/
| Una iniziativa a livello di questo NG:
| Partecipa alla stesura di progetti VB sviluppati in team, informati sul
Sito Comune
| sezione Leonardo.  Io partecipo al progetto Data Raptor, alleati con noi.
 \/\/\/\/\/\/\/\/\/\
Ciao
Ettore Maronese, il Mes
http://www.maronese.com/mes
Sito Comune di questo NG
http://www.murialdo.it/it_lang_vb

Ho seguito quello che hai detto e ho fatto questo:
    Dim Dati As String
    tcpClient.RemoteHost = "
www.ciofalo.it
"
    tcpClient.RemotePort = 80
    tcpClient.Connect
    Delay (1)   ' Attendi la connessione
    tcpClient.SendData "GET /banner/incontri.gif HTTP/1.0" & vbCrLf
    tcpClient.GetData Dati ' Prendi i dati
    Text1.Text = Dati
    MsgBox ("fatto") ' Quando hai finito, dimmelo...
Il tutto va' bene e senza problemi... ma la variabile Dati rimane vuota...
sono io che sbaglio o cosa?


 wrote in message Bmwm6.5163$Y93....@news.infostrada.it... > Ho seguito quello che hai detto e ho fatto questo: >     Dim Dati As String >     tcpClient.RemoteHost = "
www.ciofalo.it
" >     tcpClient.RemotePort = 80 >     tcpClient.Connect >     Delay (1)   ' Attendi la connessione >     tcpClient.SendData "GET /banner/incontri.gif HTTP/1.0" & vbCrLf >     tcpClient.GetData Dati ' Prendi i dati >     Text1.Text = Dati >     MsgBox ("fatto") ' Quando hai finito, dimmelo... > Il tutto va' bene e senza problemi... ma la variabile Dati rimane vuota... > sono io che sbaglio o cosa? cerrrrrrto, La .GetData va usata solo al sopraggiungere dell'evento "DataArrived" (o come diavolo si chiama, non ricordo) Se vuoi, sul Sito Comune di questo NG ci sono diversi esempi d'uso dell'oggetto winsock. Il Sito Comune lo trovi qui: 
http://www.murialdo.it/it_lang_vb
 Ecco un esempio che ho ottenuto collegandomi a manina in telnet al sito 
www.maronese.com
 Io ho scritto: (terminando con 2 invio) ------------------- inizio GET /mes/pics/mes_small.gif HTTP/1.0 ------------------- fine E lui mi ha risposto: ------------------- inizio HTTP/1.1 200 OK Date: Mon, 26 Feb 2001 17:59:03 GMT Server: Apache/1.2.4 PHP/FI-2.0 Last-Modified: Mon, 23 Aug 1999 20:24:29 GMT ETag: "94019-115-37c1adfd" Content-Length: 277 Accept-Ranges: bytes Connection: close Content-Type: image/gif GIF89aC Ulead GIF SmartSaver Ver 2.0,C +       84*.L&ITLI'Kj n^^o ?uYwfX/r ------------------- fine ps: Se ricordo bene il vbCrLf non va bene perch  non serve un chr$(13)&chr$(10), ma un chr$(10)&chr$(10). Potrebbe andarti comunque su alcuni serve ma non su altri. pps: Come fai a mettere una GIF in una TextBox? ^__^ ppps: Fai prima esperimenti con pagine html, tipo /index.html, che sono solo testo ed   + facile fare i tests, poi quando tutto funziona, lo applichi ai GIF.  /\/\/\/\/\/\/\/\/\/ | Una iniziativa a livello di questo NG: | Partecipa alla stesura di progetti VB sviluppati in team, informati sul Sito Comune | sezione Leonardo.  Io partecipo al progetto Data Raptor, alleati con noi.  \/\/\/\/\/\/\/\/\/\ Ciao Ettore Maronese, il Mes 
http://www.maronese.com/mes
 Sito Comune di questo NG 
http://www.murialdo.it/it_lang_vb
 

 GIF.
Appunto... con le pag funziona ma con le pic no... mi arrivano pochi byte e
il bytearrived dice 0



Spe, una cosa alla volta.
Per files grandi, l'evento di "arrivo dati" viene richiamato + di una
volata, ossia, ad ogni arrivo di un blocco dati. Tu devi metterti via tutto
per  in una variabile stringa globale facendo ad ogni arrivo arrivo dati
A$=A$ & NuoviDati. Sai che i dati sono finiti solo quando ti arriva l'evento
di connesione caduta. A quel punto elimini dalla A$ la testata (credo tutto
ciň che precede un doppio chr$(10)) che marca appunto l'inizio dei dati
veri) e salvi i dati del gif in un file xyz.gif.
A questo punto devi caricare il file nella tua Pictire1 e qui, non ricordo
se la funzione LoadPicture("c:\xyz.gif") supporta anche il formato gif
(credo di si).
Dai che sei vicino, lo stai per domare! ^______^
/\/\/\/\/\/\/\/\/\/\/\/\/
|  Qui sul NG č nata una iniziativa:
|  Partecipa alla stesura di progetti VB sviluppati in team,
|  informati sul Sito Comune sezione Leonardo. Io
|  partecipo al progetto Data Raptor, alleati con noi.
\/\/\/\/\/\/\/\/\/\/\/\/\
Ciao
Ettore Maronese, il Mes
http://www.maronese.com/mes
Sito Comune di questo NG
http://www.murialdo.it/it_lang_vb


Si e' vero, ma vale solo per i file di testo, mentre per i file binari non
aggiunge nulla, percio' non si puo' controllare il Content-Length.


 aggiunge nulla, percio' non si puo' controllare il Content-Length.
Mi pare strano, cmq prova con una richiesta piu' complessa, magari
consultando l'RFC dell'HTTP 1.1...
Ciaotutti,
Alessandro

 elaborarlo (tutti in automatico)?
Bhe, ci sono 2 modi:
1) Appena ricevuto l'header vai a vedere la riga "Content-Length:" e quindi
sai quanti bytes dovranno arrivare oltre l'header
2) Aspetti che la connessione venga chiusa (c'e' un evento su chiusura
connessione) e a quel punto fai tutti i tests del caso (controlli che la
lunghezza riportata dalla riga "Content-Length:" dell'header corrisponde).
Questa strada è possibile proprio perchè il protocollo HTTP prevede che vi
sia una connessione per ogni richiesta, e che questa venga chiusa a fine
della trasmissione.
 /\/\/\/\/\/\/\/\/\/
| Una iniziativa a livello di questo NG:
| Partecipa alla stesura di progetti VB sviluppati in team, informati sul
Sito Comune
| sezione Leonardo.  Io partecipo al progetto Data Raptor, alleati con noi.
 \/\/\/\/\/\/\/\/\/\
Ciao
