IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

R�cup�rer la source html d'un site web


Sujet :

C++

  1. #1
    Membre confirm� Avatar de Electroniktor
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    150
    D�tails du profil
    Informations personnelles :
    �ge : 32
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 150
    Par d�faut R�cup�rer la source html d'un site web
    Bonjour tout le monde !

    Je voudrais savoir comment faire pour r�cup�rer la source html d'un site web � partir de son adresse.
    Par exemple, dans la console, je tape http://www.developpez.com et mon programme enregistre la source html de ce site dans un fichier.

    Merci d'avance pour vos explications !

  2. #2
    Alp
    Alp est d�connect�
    Expert confirm�

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par d�faut
    Soit tu fais tout � la main : tu utilises les sockets (natifs ou bien une biblioth�que toute pr�te) et tu regardes le protocole HTTP pour voir ce que tu dois dire au serveur web de developpez.com pour qu'il te donne les sources de la page que tu veux (requ�te GET).
    Soit tu utilises une biblioth�que comme cURL.

  3. #3
    Membre confirm� Avatar de Electroniktor
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    150
    D�tails du profil
    Informations personnelles :
    �ge : 32
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 150
    Par d�faut
    Salut, merci de me r�pondre !

    Je pense plutot faire cela � la main, c'est plus instructif !
    Mais pourrais tu me montrer un peu de code (ou du pseudo code) car l� j'ai un petit peu de mal � tout comprendre !

    Merci.

  4. #4
    Alp
    Alp est d�connect�
    Expert confirm�

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par d�faut
    Voici un document qui d�crit le protocole de communication avec un serveur HTTP : http://abcdrfc.free.fr/rfc-vf/rfc1945.html

    Ensuite, il faut que tu lises un cours sur la programmation r�seau en C++ en utilisant les sockets natifs (ceux fournits en C++ pour ton OS), par exemple celui-l� : http://broux.developpez.com/articles/c/sockets/

    Le port d'un serveur HTTP est souvent 80. Tu as l'h�te : developpez.com .

    A toi de chercher un peu maintenant

  5. #5
    Membre confirm� Avatar de Electroniktor
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    150
    D�tails du profil
    Informations personnelles :
    �ge : 32
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 150
    Par d�faut
    J'ai lu les documents que tu m'as donn� et j'ai appris plein de choses !

    J'ai r�ussi � faire ce que je voulais (je me suis quand m�me un peu aid� d'un autre code ... ) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #include <winsock2.h>
    #include <stdio.h>
    #pragma comment (lib,"ws2_32.lib")
     
    int connection (char* serveur, int port)
    {
    	int sock;
    	struct sockaddr_in serverSockAddr;
    	struct hostent *serverHostEnt;
     
    	memset (&serverSockAddr, 0, sizeof (serverSockAddr));
    	serverHostEnt = gethostbyname (serveur);
    	if (serverHostEnt == NULL)
    	{
    		printf ("Serveur introuvable : %s\n", serveur);
    		return -1;
    	}
     
    	memcpy (&serverSockAddr.sin_addr, serverHostEnt -> h_addr, serverHostEnt -> h_length);
    	serverSockAddr.sin_port = htons (port);
    	serverSockAddr.sin_family = AF_INET;
     
    	if ((sock = socket (AF_INET,SOCK_STREAM, 0)) < 0)
    	{
    		printf ("Probleme lors de la creation du socket ...\n");
            return -1;
        }
    	if (connect (sock, (struct sockaddr *) &serverSockAddr, sizeof (serverSockAddr)) < 0)
    	{
    		printf ("Impossible de se connecter\n");
            return -1;
        }
     
    	return sock;
    }
     
    void download (int sock, char* hote, char* chemin, char* nom)
    {
        char commande [500], buf [1024];
    	int lu = 1;
    	FILE* fichier = fopen (nom, "wb");
     
        sprintf (commande, "GET %s%s HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\n\r\n", chemin, nom, hote);
        send (sock, commande, strlen (commande) + 1, 0);
     
    	while (lu > 0)
    	{
    		lu = recv (sock, &(buf [0]), 1024, 0);
    		fwrite (&(buf [0]), lu, 1, fichier);
    	}
     
    	fclose (fichier);
    }
     
    int main (void)
    {
        WSADATA wsa;
    	WSAStartup (MAKEWORD (2, 0), &wsa);
     
    	int sock = -1, port = 80;
    	char serveur []  = "char serveur";
    	char hote[]  = "char hote";
    	char chemin [] = "/";
    	char fichier [] = "index.html";	
     
    	sock = connection (serveur, port);
    	if (sock < 0)    return -1;
     
    	download (sock, hote, chemin, fichier);
     
    	shutdown (sock, 2);
    	closesocket (sock);
    	WSACleanup ();
     
    	return 0;
    }
    Et cela marche super bien !

    Par contre j'ai une petite question : j'ai essay� de copier un site qui a un compteur de visites. La copie marche tr�s bien, mais je me suis aper�u que le compteur n'est pas incr�ment� apr�s le passage de mon programme. Est-ce normal ? Parce que mon programme se connecte bien au site, non ?

  6. #6
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    Bonsoir,

    Peut-�tre que ledit site, pour �viter l'augmentation du compteur de visite par des bots, regarde le champ User-Agent de la requ�te?
    Ou alors le compteur n'est pas mis � jour en temps r�el...
    Ou encore vu que ton IP reste la m�me il n'augmente pas le nombre de visite

  7. #7
    Membre confirm� Avatar de Electroniktor
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    150
    D�tails du profil
    Informations personnelles :
    �ge : 32
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 150
    Par d�faut
    Ou encore vu que ton IP reste la m�me il n'augmente pas le nombre de visite
    Juste par curiosit� : on peut changer son adresse IP lorsque on fait la requete ?

  8. #8
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    Salut,

    ton IP je pense pas, mais tu peux passer par un proxy ou te d�brouiller avec ton modem/ta box pour changer d'IP. Tu peux aussi indiquer une mauvaise IP au site (mais l� c'est plus hard), et dans ce cas tu ne recevras jamais de r�ponse...

  9. #9
    Expert confirm�

    Homme Profil pro
    Ing�nieur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    4 253
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Ing�nieur syst�mes et r�seaux
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par d�faut
    Citation Envoy� par coyotte507 Voir le message
    Bonsoir,

    Peut-�tre que ledit site, pour �viter l'augmentation du compteur de visite par des bots, regarde le champ User-Agent de la requ�te?
    Ou alors le compteur n'est pas mis � jour en temps r�el...
    Ou encore vu que ton IP reste la m�me il n'augmente pas le nombre de visite
    Ou alors le compteur de visite dans la page web est un LIEN vers le compteur en question, et que c'est CE lien qui va incr�menter le compteur.

Discussions similaires

  1. R�cup�rer source HTML d'une page web
    Par crazyman8 dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 3
    Dernier message: 04/01/2014, 17h49
  2. R�cup�rer la source html d'une page web
    Par Electroniktor dans le forum Qt
    R�ponses: 2
    Dernier message: 16/07/2008, 16h16
  3. R�ponses: 5
    Dernier message: 08/02/2008, 09h22
  4. [2.0] Source de donn�es de site web
    Par Sadneth dans le forum ASP.NET
    R�ponses: 1
    Dernier message: 04/04/2007, 13h58
  5. Charger la source html d'un site web
    Par Tentative dans le forum Access
    R�ponses: 2
    Dernier message: 03/01/2007, 00h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo