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 du Club Avatar de Electroniktor
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 150
    Points : 55
    Points
    55
    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 éminent sénior

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    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 du Club Avatar de Electroniktor
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 150
    Points : 55
    Points
    55
    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 éminent sénior

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    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 du Club Avatar de Electroniktor
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 150
    Points : 55
    Points
    55
    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 expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    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 du Club Avatar de Electroniktor
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 150
    Points : 55
    Points
    55
    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 expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    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 éminent

    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
    Points : 7 618
    Points
    7 618
    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.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

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écupérer les @IP publics visitant un site web
    Par killer69 dans le forum C#
    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