Précédent   Forum du club des développeurs et IT Pro > C et C++ > Outils pour C & C++ > C++Builder
C++Builder Environnement de développement RAD C++Builder. Avant de poster -> F.A.Q C++Builder, Sources C++Builder
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/12/2012, 12h19   #1
kurul1
Membre éclairé
 
Avatar de kurul1
 
Inscription : janvier 2005
Messages : 817
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 817
Points : 373
Points : 373
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 :
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 :
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
kurul1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 12h30   #2
PocoYote
Membre du Club
 
Inscription : août 2010
Messages : 74
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 74
Points : 40
Points : 40
Je fais plutôt comme ça pour récupérer une page :
Code :
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);
...
PocoYote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 12h43   #3
papemignane
Invité de passage
 
Homme
Architecte de système d'information
Inscription : 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 : 0
Points : 0
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 :
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 :
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
papemignane est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/12/2012, 13h37   #4
kurul1
Membre éclairé
 
Avatar de kurul1
 
Inscription : janvier 2005
Messages : 817
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 817
Points : 373
Points : 373
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 :
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
kurul1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 13h49   #5
Argol_Medusa
Membre habitué
 
Avatar de Argol_Medusa
 
Homme Yann
Ingénieur Radiofréquences
Inscription : août 2005
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Yann
Localisation : France

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

Informations forums :
Inscription : août 2005
Messages : 153
Points : 143
Points : 143
Envoyer un message via MSN à Argol_Medusa
Citation:
Envoyé par kurul1 Voir le message
Bonjour à tous

Code :
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
Argol_Medusa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 13h53   #6
kurul1
Membre éclairé
 
Avatar de kurul1
 
Inscription : janvier 2005
Messages : 817
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 817
Points : 373
Points : 373
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
kurul1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 14h21   #7
PocoYote
Membre du Club
 
Inscription : août 2010
Messages : 74
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 74
Points : 40
Points : 40
http://en.wikipedia.org/wiki/HTTP_302

A priori il te propose une redirection.
PocoYote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 14h35   #8
kurul1
Membre éclairé
 
Avatar de kurul1
 
Inscription : janvier 2005
Messages : 817
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 817
Points : 373
Points : 373
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
kurul1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 21h02   #9
Crayon
Membre Expert
 
Avatar de Crayon
 
Inscription : avril 2005
Messages : 1 612
Détails du profil
Informations personnelles :
Localisation : Autre

Informations forums :
Inscription : avril 2005
Messages : 1 612
Points : 1 796
Points : 1 796
Salut, pour les redirection il suffit d'ajouter ceci:
Code :
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
Crayon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2012, 08h06   #10
Argol_Medusa
Membre habitué
 
Avatar de Argol_Medusa
 
Homme Yann
Ingénieur Radiofréquences
Inscription : août 2005
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Yann
Localisation : France

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

Informations forums :
Inscription : août 2005
Messages : 153
Points : 143
Points : 143
Envoyer un message via MSN à Argol_Medusa
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
Argol_Medusa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2012, 15h42   #11
kurul1
Membre éclairé
 
Avatar de kurul1
 
Inscription : janvier 2005
Messages : 817
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 817
Points : 373
Points : 373
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
kurul1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2012, 20h43   #12
Crayon
Membre Expert
 
Avatar de Crayon
 
Inscription : avril 2005
Messages : 1 612
Détails du profil
Informations personnelles :
Localisation : Autre

Informations forums :
Inscription : avril 2005
Messages : 1 612
Points : 1 796
Points : 1 796
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
Crayon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 08h35   #13
kurul1
Membre éclairé
 
Avatar de kurul1
 
Inscription : janvier 2005
Messages : 817
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 817
Points : 373
Points : 373
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
kurul1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 21h48   #14
Crayon
Membre Expert
 
Avatar de Crayon
 
Inscription : avril 2005
Messages : 1 612
Détails du profil
Informations personnelles :
Localisation : Autre

Informations forums :
Inscription : avril 2005
Messages : 1 612
Points : 1 796
Points : 1 796
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
Crayon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2012, 10h31   #15
kurul1
Membre éclairé
 
Avatar de kurul1
 
Inscription : janvier 2005
Messages : 817
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 817
Points : 373
Points : 373
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 :
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);
}
kurul1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2012, 11h46   #16
kurul1
Membre éclairé
 
Avatar de kurul1
 
Inscription : janvier 2005
Messages : 817
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 817
Points : 373
Points : 373
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 :
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 :
	String AESTIVACVNLIST = "\"2011\",\"10\",\"Male 40 to 44\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"10\"";
2ème en ajoutant un élément par paramètres
Code :
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
kurul1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2012, 21h02   #17
Crayon
Membre Expert
 
Avatar de Crayon
 
Inscription : avril 2005
Messages : 1 612
Détails du profil
Informations personnelles :
Localisation : Autre

Informations forums :
Inscription : avril 2005
Messages : 1 612
Points : 1 796
Points : 1 796
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
Crayon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h01.


 
 
 
 
Partenaires

Hébergement Web