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

Windows Discussion :

winsock source page web différente


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut winsock source page web différente
    Bonjour bonjour,

    j'ai un code avec winsock pour obtenir le code source d'une page web :
    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
            string source = get_source(series[0].get_url());
            int source_debut = source.find("<pre>",0);
            int source_fin = source.find("</pre>",0);
            int source_taille = source_fin - source_debut;
            source = source.substr(source_debut, source_taille);
    
            cout << source;
    
    string get_source(string url)
    {
        WSADATA WSAData;
        WSAStartup(MAKEWORD(2,0), &WSAData);
    
        SOCKET sock;
        SOCKADDR_IN sin;
    
        char buffer[1024];
    
    
        string srequete = "GET " + url + " HTTP/1.0\nAccept: */*\n\n";
        size_t requete_taille = srequete.size() + 1;
    
        char crequete[requete_taille];
        strncpy( crequete, srequete.c_str(), requete_taille );
    
        int i = 0;
        string source = "";
    
        sock = socket(AF_INET, SOCK_STREAM, 0);
    
        sin.sin_addr.s_addr = inet_addr("216.239.136.165"); // site web www.aol.com
        sin.sin_family = AF_INET;
        sin.sin_port = htons(80); // port HTTP.
    
        connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // on se connecte sur le site web.
        send(sock, crequete, strlen(crequete), 0); // on envoie la requête HTTP.
        do
        {
            i = recv(sock, buffer, sizeof(buffer), 0); // le buffer récupère les données reçues.
            source += buffer;
        } while (i != 0);
    
    
        closesocket(sock); // on ferme le socket.
        WSACleanup();
    
        return source;
    }
    et sur certaines pages web le code est légèrement différent.

    Je ne pense pas que cela puisse etre du à un code coté serveur étant donné l'exemple suivant :

    Je charge http://epguides.com/traveler/ et affiche la source à partir de <pre>, j'obtiens :
    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
    <pre>
    
                                Original
      Episode #     Prodf="http://us.imdb.com/title/tt805668/episodes">Show<br />Pages<br />@IMDb</a></td>
    <td><a target="_blank" href="http://www.google.com/search?q=%22Traveler%22">Related links</a><br />via<br /><a target="_blank" href="http://www.google.com/">Google</a></td>
    <td><a target="_blank" href="../search/">SEARCH<br />epguides<br />&amp; TV.com</a></td>
    <td><a href="../FAQ/">FAQ</a></td>
    <td><a href="../menu/">All<br />Shows<br />Menu</a></td>
    <td><a href="../menu/current.shtml"><strong>Current<br />Shows<br />Menu</strong></a></td>
    <!--
    <td><font size='-1'><a target="_blank" href="../search/">SEARCH<br />epguides<br />&amp; TV.com</a></font></td>
    <td><font size='-1'><a href="../FAQ/">FAQ</a></font></td>
    <td><font size='-1'><a href="../menu/">All<br />Show☻ #      Air Date   Titles
    _____ ______ ___________  ___________ ___________________________________________
    
    Pilot
    
           P- 1        100     10 May 07   <a target="_blank" href="http://www.tv.com/traveler/pilot/episode/738343/summary.html">Pilot</a>
    
    Season 1
    
      2.   1- 2        101     30 May 07   <a target="_blank" href="http://www.tv.com/traveler/the-retreat/episode/849925/summary.html">The Retreat</a>
      3.   1- 3        102      6 Jun 07   <a target="_blank" href="http://www.tv.com/traveler/new-haven/episode/858658/summary.html">New Haven</a>
    
    ...
    ce qui est "faux" par rapport à firefox ou ie car si j'essaie d'ouvrir la source obtenue dans un navigateur, la plus part des choses sont invisible étant donné le <!-- 4 lignes avant le _______

    tandis qu'avec d'autres pages cela fonctionne parfaitement :
    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
    <pre>
    
                                Original
      Episode #     Prod #      Air Date   Titles
    _____ ______ ___________  ___________ ___________________________________________
    
    Season 1
    
      1.   1- 1     1AFF79      6 Nov 01   <a target="_blank" href="http://www.tv.com/24/1200-a.m.-100-a.m./episode/85396/summary.html">12:00 A.M.-1:00 A.M.</a>
      2.   1- 2     1AFF01     13 Nov 01   <a target="_blank" href="http://www.tv.com/24/100-a.m.-200-a.m./episode/85397/summary.html">1:00 A.M.-2:00 A.M.</a>
      3.   1- 3     1AFF02     20 Nov 01   <a target="_blank" href="http://www.tv.com/24/200-a.m.-300-a.m./episode/85398/summary.html">2:00 A.M.-3:00 A.M.</a>
      4.   1- 4     1AFF03     27 Nov 01   <a target="_blank" href="http://www.tv.com/24/300-a.m.-400-a.m./episode/85399/summary.html">3:00 A.M.-4:00 A.M.</a>
    
    ...
    Suis-je compréhensible ? quelqu'un a une idée d'ou peut venir mon problème ???

    Merci d'avance pour votre aide !!!

  2. #2
    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
    Ben... c'est pas si simple que ca la récupération des données HTTP

    Il manque un tas de headers dans ta requête.
    Certains sont nécessaires comme "server"... (quoique tu passes toute l'url dans le path, voir plus-bas)
    Certains optionels (accept-encoding, ..., language...).
    Certains permettent des rendus différents en fonction du client (Agent: )
    ...

    De plus le source renvoyé va contenir tous les headers de réponse... y compris les "BULK" marks si le serveur répond par bulk (pas de content-length) mais je suis pas sur que ce soit possible en HTTP/1.0

    Pour le path, j'ai toujours essayé de matcher aux specs... à savoir...
    Si le serveur de mon URL est celui auquel je suis connecté, alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GET /resource/path/only HTTP/1.0
    Server: mon.server.com
    Accept: */*
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GET http://monserver.com/resource/path/only HTTP/1.0
    Accept: */*
    Ce dernier est 'sensé' être la forme quand on passe par un proxy.
    Mais bon... ca doit pas trop jouer quand même

  3. #3
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Merci de tes conseils, j'ai corrigé mon entete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        string srequete = "GET /Smallville/ HTTP/1.1\n";
        srequete += "Host: epguides.com\n";
        srequete += "Connection: close\n";
        srequete += "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n";
        srequete += "Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3\n";
        srequete += "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n";
        srequete += "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3\n";
        srequete += "Referer: http://pozzyx.net/\n";
        srequete += "\n";
    Je me suis inspiré de celui ci :
    Ici

    et pourtant j'obtiens pas la meme source que celle donnée sur cette dernière page.

    Vraiment je comprend pas d'ou ça peut venir

  4. #4
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    D'ailleur meme sans le substr ma source n'est pas complète, elle ne commence pas par le début, et elle ne se fini pas par la fin

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il me semble que les fins de ligne doivent être \r\n et non \n.

  6. #6
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    avec les \r\n voila ce que j'ai comme réponse :
    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
    GET /Smallville/ HTTP/1.1
    Host: epguides.com
    Connection: close
    Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
    Referer: http://pozzyx.net/
    
    HTTP/1.1 200 OK
    Transfer-Encoding: chunked
    Connection: close
    Date: Thu, 24 May 2007 10:02:36 GMT
    Server: Microsoft-IIS/6.0
    --------------: -----
    Content-Type: text/html
    
    4DF
    <li><a href="http://us.imdb.com/M/person-substring?Tom+Welling"><strong>Tom Welling</strong></a> as Clark Kent<br>4>="26"></a>
    <td>aired from: <em>Oct 2001</em><br>to: <em>___ ____</em><☻5E0com/show/1718/summary.html">Top Contributors</a></h4>="26"></a>
    <td bgcolor="BBBBFF"><font size="-1"><a target="visit" href="http://www.tv.com/show/1718/forums.html">Questions<br>Forum<br>@TV.com/a></font></td>uide</a></font></td>
    Donc la page ne commence toujours pas par le <html>.

    Mais une autre question, que signifie le Transfer-Encoding: chunked ??

    Merci pour votre aide !!!

Discussions similaires

  1. Recuperer source page web
    Par manworms2 dans le forum C++Builder
    Réponses: 10
    Dernier message: 20/04/2012, 13h07
  2. [cURL] Récupérer source page web Forbidden
    Par shaiton dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 04/05/2009, 19h07
  3. Extraire code source page web
    Par kango dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 26/11/2008, 14h26
  4. Recupérer code source page web
    Par ddsjm dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/03/2008, 21h54

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