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++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  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

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