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++Builder Discussion :

Récupérer le Code d'une page HTML


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut Récupérer le Code d'une page HTML
    Bonjour à tous

    J'essaye de récupérer le code source d'une page HTML dans un programme pour l'analyser et j'ai une erreur systématiquement

    J'ai suivit plusieurs post sur ce forum mais sans résultats

    j'ai ceci comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception 'first chance' à $7563C41F. Classe d'exception EIdHTTPProtocolException avec un message 'HTTP/1.1 302 Found'. Processus .....
    il semble qu'il manque quelque chose mais je ne sais pas quoi

    j'utilise le composant TidHTTP
    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TMemoryStream *Stream = new TMemoryStream();
    IdHTTP->Get(EditURL->Text, Stream);
     
    TStringList *Liste = new TStringList();
    Liste->LoadFromStream(Stream);
    L'erreur est sur la ligne Get

    Merci d'avance pour votre aide

  2. #2
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 123
    Points : 93
    Points
    93
    Par défaut
    Je fais plutôt comme ça pour récupérer une page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TStringStream* pStringStream = new TStringStream();
    TIdHTTP* mpIdHTTP = new TIdHTTP(NULL);
    mpIdHTTP->ReadTimeout = 2000;
    try
        {
        mpIdHTTP->Get(url, pStringStream);
        }
    catch(Exception &e)
        {
        ...
        }
    ShowMessage(pStringStream->DataString);
    ...

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par kurul1 Voir le message
    Bonjour à tous

    J'essaye de récupérer le code source d'une page HTML dans un programme pour l'analyser et j'ai une erreur systématiquement

    J'ai suivit plusieurs post sur ce forum mais sans résultats

    j'ai ceci comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception 'first chance' à $7563C41F. Classe d'exception EIdHTTPProtocolException avec un message 'HTTP/1.1 302 Found'. Processus .....
    il semble qu'il manque quelque chose mais je ne sais pas quoi

    j'utilise le composant TidHTTP
    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TMemoryStream *Stream = new TMemoryStream();
    IdHTTP->Get(EditURL->Text, Stream);
     
    TStringList *Liste = new TStringList();
    Liste->LoadFromStream(Stream);
    L'erreur est sur la ligne Get

    Merci d'avance pour votre aide
    Soit plus explicite

  4. #4
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Tout d'abord merci à vous deux pour vos réponses

    Citation Envoyé par PocoYote Voir le message
    Je fais plutôt comme ça pour récupérer une page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TStringStream* pStringStream = new TStringStream();
    TIdHTTP* mpIdHTTP = new TIdHTTP(NULL);
    mpIdHTTP->ReadTimeout = 2000;
    try
        {
        mpIdHTTP->Get(url, pStringStream);
        }
    catch(Exception &e)
        {
        ...
        }
    ShowMessage(pStringStream->DataString);
    ...
    J'ai toujours la même erreur en utilisant ta méthode PocoYote

    Citation Envoyé par papemignane Voir le message
    Soit plus explicite
    En quoi voudrais-tu que je soit plus explicite papemignane. Je voudrais récupérer le code HTML d'une page dont je connais l'URL pour analyse son code

  5. #5
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Citation Envoyé par kurul1 Voir le message
    Bonjour à tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TMemoryStream *Stream;
    Stream = new TMemoryStream();
    IdHTTP->Get(EditURL->Text, Stream);
    J'utilise exactement la même méthode, ça fonctionne.

    Est-ce que tu n'as pas un firewall qui bloque ou quelque chose comme ça plutôt?

    Par expérience c'est toujours un problème de blocage de port dans 80% des cas

    ( Par contre oublie pas de delete tes objets )
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  6. #6
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    J'y ai pensé justement et j'ai essayé en désactivant le parefeu mais c'est pareil

    Pour préciser un peut mon erreur, j'ai une boite de dialogue avec marqué HTTP/1.1.302 Fond qui s'affiche

  7. #7
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 123
    Points : 93
    Points
    93
    Par défaut
    http://en.wikipedia.org/wiki/HTTP_302

    A priori il te propose une redirection.

  8. #8
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Ok merci pour ta réponse mais je ne sais pas comment faire pour passer outre, car moi la redirection ne m'intéresse pas, ce que je veux c'est le code de la page en cours

  9. #9
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Salut, pour les redirection il suffit d'ajouter ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IdHTTP->HandleRedirects = true;
    Si tu veux plus d’exemple avec TIdHTTP, va faire un tour sur mon blogue. Je me suis pas mal amusé avec ça récemment: http://www.optimatek.com/category/cppbuilder/
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  10. #10
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    C'est quoi ton url ?
    As-tu essayé avec une autre adresse toute simple ( http://www.chemin/nom_du_fichier_complet.Bin ) histoire de voir si c'est lié à l'objet en lui-même que tu essayes de charger ou si c'est un autre problème ( utilises-tu proxy ? )
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  11. #11
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci à vous deux

    Crayon
    J'ai vu cette propriété et je l'ai mise à true comme tu me le conseil et je n'ai plus d'erreur. par contre j'obtiens un document vide.

    Argol_Medusa j'ai essayé avec une autre adresse et cela fonctionne avec la propriété que Crayon m'a conseillé à true

    Après quelques recherche, en fait m'a page est un script cgi d'oû la page vide.
    J'ai trouvé ceci

    http://www.delphipages.com/forum/sho....php?t=187814/

    Mais je n'ai pas trouvé le composant dans C++ builder XE3

    j'ai essayé d'importer les composant HTML Object Library de Microsoft mais j'ai une erreur à la complilation

    [bcc32 Erreur] MSHTML_OCX.cpp(45554): E2491 Compte VIRDEF maximal dépassé ; vérifiez la récursivité)

    et je ne sais pas de quoi cela viens

  12. #12
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Salut, comme Argol_Medusa l'a mentionné, avoir le lien pour la page web où l'information doit être récupéré pourrait nous aider.

    Sinon, est-ce que tu as essayer d'utiliser les composants ICS?
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  13. #13
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    C'est le résultat de ce formulaire qu'un collègue voudrais que je lui récupère, ce sont les résultats du marathon de new-york

    http://web2.nyrrc.org/cgi-bin/start....ve_search.html

    Sinon je vais essayé ICS merci Crayon

  14. #14
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Salut kurul1, le site web que tu as écris fonctionne par requête POST et non par GET. Voir http://fr.wikipedia.org/wiki/HTTP#M.C3.A9thodes

    Donc, il ne faut pas faire:
    Mais plutôt:
    Voici la liste des paramètres POST à envoyer avec certaines valeurs:
    • AESTIVACVNLIST input.searchyear,input.top,input.agegroup,input.f.hh,input.f.mm,input.t.hh,input.t.mm,team_code,input.state,input.country,input.top.wc
    • input.agegroup
    • input.bib
    • input.country
    • input.f.age
    • input.f.hh
    • input.f.mm
    • input.hist.fname
    • input.hist.lname
    • input.lname
    • input.searchyear 2011
    • input.state
    • input.t.age
    • input.t.hh
    • input.t.mm
    • input.top 10
    • input.top.wc 10
    • search.method search.flat
    • team_code
    • top.wc.type P
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  15. #15
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci à toi Crayon

    J'ai donc fait ceci mais cela ne fonctionne toujours pas, j'obtient en retour le code de la page d'accueil du site

    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
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    	TIdMultiPartFormDataStream *Param = new TIdMultiPartFormDataStream();
    	String Reponse;
     
    	// On construit les paramètres
    	Param->AddFormField("search.method", "search.agegroup", "", "RADIO", "");				// search_method par age
    	Param->AddFormField("input.hist.fname", "", "", "TEXT", "");								// input.hist.fname par défaut vide
    	Param->AddFormField("input.hist.lname", "", "", "TEXT", "");								// input.hist.lname par défaut vide
    	Param->AddFormField("top.type", "", "", "RADIO", "");										// top.type par défaut rien n'est sélectionné
    	Param->AddFormField("input.f.age", "", "", "TEXT", "");										// input.f.age par défaut vide
    	Param->AddFormField("input.t.age", "", "", "TEXT", "");										// input.t.age par défaut vide
    	Param->AddFormField("input.lname", "", "", "TEXT", "");										// input.lname par défaut vide
    	Param->AddFormField("input.bib", "", "", "TEXT", "");										// input.bib" par défaut vide
    	Param->AddFormField("top.wc.type", "P", "", "RADIO", "");										// top.wc.type par défaut vide
    	Param->AddFormField("top.wc.gender", "", "", "RADIO", "");									// top.wc.gender par défaut rien n'est sélectionné
     
    	// on va construire la chaine AESTIVACVNLIST
    	String AESTIVACVNLIST = "2011,10,Male 40 to 44,,,,,,,,";
     
    	// on ajoute le paramètre
    	Param->AddFormField("AESTIVACVNLIST", AESTIVACVNLIST, "", "HIDDEN", "");
     
    	// On se met en Mode multipart/form-data
    	IdHTTP->Request->ContentType = "multipart/form-data";
     
    	Reponse = IdHTTP->Post(EditURL->Text, Param);
     
    	Memo1->Lines->Add(Reponse);
    }

  16. #16
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Petite erreur sur la ligne de AESTIVACVNLIST j'avais oublié que le dernier paramètre avait une valeur par défaut

    Après correction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	String AESTIVACVNLIST = "2011,10,Male 40 to 44,,,,,,,,10";
    Mais toujours pareil, j'obtiens la page d'accueil du site

    J'ai aussi essayé ces deux autres façon mais cela ne change rien

    1ère en ajoutant des guillemets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	String AESTIVACVNLIST = "\"2011\",\"10\",\"Male 40 to 44\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"10\"";
    2ème en ajoutant un élément par paramètres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	Param->AddFormField("AESTIVACVNLIST", "2011"); 			// input.searchyear défaut 2011
    	Param->AddFormField("AESTIVACVNLIST", "10");				// input.top défaut 10
    	Param->AddFormField("AESTIVACVNLIST", "Male 40 to 44");		// input.agegroup
    	Param->AddFormField("AESTIVACVNLIST", "");					// input.f.hh défaut à vide
    	Param->AddFormField("AESTIVACVNLIST", "");					// input.f.mm défaut à vide
    	Param->AddFormField("AESTIVACVNLIST", "");					// input.t.hh défaut à vide
    	Param->AddFormField("AESTIVACVNLIST", "");                  // input.T.mm défaut à vide
    	Param->AddFormField("AESTIVACVNLIST", "");                  // team_code défaut à vide
    	Param->AddFormField("AESTIVACVNLIST", "");                  // input.state défaut à vide
    	Param->AddFormField("AESTIVACVNLIST", "");                  // input.country défaut à vide
    	Param->AddFormField("AESTIVACVNLIST", "10");					// input.top.wc défaut à 10

  17. #17
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Salut, j'ai vu que le site web utilise les cookies suivants: aestiva.cookieid, aestiva.cookiesid et BIGipServerweb2.nyrrc.org. Donc il te faudrait peut-être utiliser un contrôle TIdCookieManager.

    Sa va pas être facile, mais je suis certain que c'est faisable.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

Discussions similaires

  1. Récupérer le code d'une page html contenue dans un balise object sous I
    Par olivier21c dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/05/2008, 16h48
  2. Récupérer des info dans une page html
    Par DORBRITZ dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 06/03/2008, 11h13
  3. vérifier du code dans une page html
    Par robert_trudel dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/06/2006, 01h17
  4. Récupérer des données sur une page HTML
    Par rupeni dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/11/2005, 17h22
  5. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 19h18

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