Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Usando un file di appoggio:
    codice:
    using namespace std;
    //Dice al linker di linkare con urlmon.lib (funziona solo con VC++, con altri compilatori aggiungi urlmon.lib ai file da linkare)
    #pragma comment(lib,"urlmon.lib")
    #include <iostream>
    #include <urlmon.h>
    #include <fstream>
    #include <string>
    #include <io.h>
    
    int main()
    {
    	string indirizzo;
    	char tempFileName[]="~downloadXXXX.tmp";
    	char buffer[256];
    	_mktemp(tempFileName);
    	cout<<"Inserisci l'indirizzo della pagina: ";
    	cin>>indirizzo;
    	if(URLDownloadToFile(NULL,indirizzo.c_str(),tempFileName,0,NULL)!=S_OK)
    	{
    		cerr<<"Impossibile effettuare il download del file.";
    	}
    	else
    	{
    		ifstream is;
    		is.open(tempFileName,ios::in | ios::binary);
    		if(!is)
    		{
    			cerr<<"Impossibile leggere il file scaricato.";
    		}
    		else
    		{
    			while(is)
    			{
    				is.read(buffer,sizeof(buffer));
    				cout.write(buffer,is.gcount());
    			}
    			is.close();
    		}
    		remove(tempFileName);
    	}
    	return 0;
    }
    Pre-emptive snarky comment di billiejoex: "In C++ ci vogliono 100 righe per fare qualunque cosa" - risposta: se noti il download del file occupa una sola riga.
    Amaro C++, il gusto pieno dell'undefined behavior.

  2. #12
    Senza usare file di appoggio (ancora più facile, compatto ed efficiente):
    codice:
    #include <iostream>
    #include <urlmon.h>
    #include <string>
    #pragma comment(lib,"urlmon.lib")
    using namespace std;
    int main()
    {
    	string indirizzo;
    	IStream * is;
    	char buffer[256];
    	cout<<"Inserisci l'indirizzo della pagina: ";
    	cin>>indirizzo;
    	if(URLOpenBlockingStream(NULL,indirizzo.c_str(),&is,0,NULL)!=S_OK)
    	{
    		cerr<<"Impossibile effettuare il download del file.";
    	}
    	else
    	{
    		ULONG readBytes;
    		while(is->Read(buffer,sizeof(buffer),&readBytes)==S_OK)
    		{
    			cout.write(buffer,readBytes);
    		}
    		is->Release();
    	}
    	return 0;
    }
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #13
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Oramai stanno cercando tutti di boicottare C e C++ proponendo in modo sempre piu' prepotente i linguaggi interpretati.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #14
    Originariamente inviato da billiejoex
    >> ciao a tutti, vorrei fare un programmino in C che sia in
    >> grado di leggere pagine internet, ma cercando su
    >> google non ho trovato come fare...

    > Dovresti studiarti le socket, il protocollo HTTP, ecc...

    ...E magari fare il giro del mondo a piedi dopo essere passato su delle braci ardenti e aver studiato ASM 12 anni per capire meglio cosa succede a basso livello quando si esegue una richiesta HTTP.
    Il punto è che semplicemente non dovrebbe utilizzare nè C nè C++.
    In python, ad esempio:

    codice:
    >>> import urllib
    >>> f = urllib.urlopen('http://www.google.it')
    >>> f.read()
    ...e hai il codice della pagina, senza bisogno di cercare l'albero più vicino a cui legare una corda insaponata e appenderti.
    No, scusa, ma c'è scritto:
    ciao a tutti, vorrei fare un programmino in C che sia in
    grado di leggere pagine internet, ma cercando su
    google non ho trovato come fare...
    non c'è scritto:
    ciao a tutti, vorrei fare un programmino in Python che sia in
    grado di leggere pagine internet, ma cercando su
    google non ho trovato come fare...

  5. #15
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Non siate così duri, mi sembra giusto ed educativo proporre altre soluzioni, anche se un pò fuori argomento.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #16
    Mi scuso se sono sembrano prepotente. Non era mia intenzione.
    E' che vedere proposte soluzioni quali:

    - Utilizzare i socket nativi
    - Studiare il protocollo HTTP
    - Appoggiarsi a wget e collegarvicisi tramite pipe per ottenere un file handler da poter leggere

    ...per scaricare il codice di una pagina web mi sembra un tantino eccessivo.

    Originariamente inviato da MItaly
    Pre-emptive snarky comment di billiejoex: "In C++ ci vogliono 100 righe per fare qualunque cosa" - risposta: se noti il download del file occupa una sola riga.
    Sarebbe bello se ci fosse un "urlmon.h" per tutti quegli altri task semplici che in C e C++ tocca fare a mano buttando sangue e fatica.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  7. #17
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    Originariamente inviato da billiejoex

    Sarebbe bello se ci fosse un "urlmon.h" per tutti quegli altri task semplici che in C e C++ tocca fare a mano buttando sangue e fatica.
    In relatà URLOpenBlockingStream e URLDownloadToFile hanno poco a che fare con il C/C++ in senso stretto. Sono piuttosto funzioni presenti in una delle dll di sistema usate da Internet Explorer. Ergo, assolutamente system dependent.

    Solo per precisare.
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  8. #18
    Originariamente inviato da billiejoex
    Sarebbe bello se ci fosse un "urlmon.h" per tutti quegli altri task semplici che in C e C++ tocca fare a mano buttando sangue e fatica.
    Be', spesso c'è, anche se è quasi sempre platform-dependent (come ha precisato Habanero) a meno di non appoggiarsi a librerie multipiattaforma.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.