[c++] sauvegarder code source IE dans un fichier...

sauvegarder code source IE dans un fichier... [c++] - C++ - Programmation

Marsh Posté le 22-09-2003 à 16:06:14    

voila, j'aimerais sauvegarder les sources d'une page automatiquement en C++, est-ce possible...?
 
j'ai des valeures a recup ds la page...


---------------
http://husiana.myftp.org/phpsysinfo
Reply

Marsh Posté le 22-09-2003 à 16:06:14   

Reply

Marsh Posté le 22-09-2003 à 16:15:14    

:??: tu veux dire télécharger une page (rien que le html) ?

Reply

Marsh Posté le 22-09-2003 à 16:33:04    

en C++Builder :
 

TIdHTTP *bidule = new TIdHTTP(0);
AnsiString page;
page = bidule->Get("htpp://bidule.com/page.html" );
delete bidule;


Message édité par antp le 22-09-2003 à 16:55:07

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 22-09-2003 à 16:46:21    

TIdHttp *bidule = new TIdHttp.Create(NULL);  
 
 
C koi cette syntaxe ?

Reply

Marsh Posté le 22-09-2003 à 16:49:18    

NULL est 0 en C++, préférez cette notation s'il vous plait

Reply

Marsh Posté le 22-09-2003 à 16:50:21    

Taz a écrit :

NULL est 0 en C++, préférez cette notation s'il vous plait


ca change quoi? :??:

Reply

Marsh Posté le 22-09-2003 à 16:52:39    

chrisbk a écrit :

TIdHttp *bidule = new TIdHttp.Create(NULL);  
 
 
C koi cette syntaxe ?


 
ha merde, l'habitude de Delphi [:rofl], j'édite
 
avec un 0 pour faire plaisir à Taz :o


Message édité par antp le 22-09-2003 à 16:53:21

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 22-09-2003 à 16:53:56    

ben c'est plus court écrire, et le NULL a été introduit comme macro pour plaisir au programmeur C: en C le typage est faible, on cast tout comme on veut, parcontre, quand il s'agit de pointeurs, ben non, faut pas déconner, si y a pas marquer NULL, ça peut pas marcher.
 
tiens questions subsidiaires
 
en C
#ifdef __CPLUSPLUS
#define NULL 0
#else  
#define NULL ((void*)0)  /* 0 ou n'importe quoi, la norme n'impose rien en C */
#endif
 
pourquoi cette différence ? pour quoi en C if(ptr) est considéré comme non-portable ?

Reply

Marsh Posté le 22-09-2003 à 17:15:57    

pour quoi en C if(ptr) est considéré comme non-portable ?
 
ptet parce que certaines plateformes n'ont aucun soucis existentiel a travailler sur 0x0

Reply

Marsh Posté le 22-09-2003 à 17:19:55    

en fait la réponse est dans la question. en C NULL est une macro qui représente une adresse dont on a la garantie qu'elle ne sera jamais utilisée. mais aucune garantie que la représentation binaire de NULL soit zéro. j'ai souvenir de je sais plus qu'elle architecture (ou bibliothèque) ou NULL était différent et ou tout acces lancer une exception spécifique (par ce que sur GNU/Linux, NULL ou pointeur dans le décor, c'est erreur de segmentation par exemple)

Reply

Marsh Posté le 22-09-2003 à 17:19:55   

Reply

Marsh Posté le 22-09-2003 à 17:21:08    

chrisbk a écrit :


ptet parce que certaines plateformes n'ont aucun soucis existentiel a travailler sur 0x0


 
Sous DOS (en mode réel), si ma mémoire est bonne, en 0x0, c'est la table des interruptions.


Message édité par kadreg le 22-09-2003 à 17:21:23

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 22-09-2003 à 17:26:06    

Neanmoins je continuerais a utiliser NULL en lieu et place de 0, vu que ca m'apporte l'information suivante :
 

Code :
  1. roger(0) // roger prends une valeur numerique en param
  2. roger(NULL); // roger prends un ptr en param


 
Question de lisibilité

Reply

Marsh Posté le 22-09-2003 à 17:28:51    

mais le compilo le sait-il ?

Reply

Marsh Posté le 22-09-2003 à 17:31:32    

Taz a écrit :

mais le compilo le sait-il ?


 
vu que NULL est un #define, le compilo en sait rien. A vrai dire il s'en fout.
(je vois pas trop ou tu veux en venir ? a cause de la surcharge de mon exemple qui va faire que le compilo va raler?)

Reply

Marsh Posté le 22-09-2003 à 18:59:58    

ben non
 

Code :
  1. void f(int);
  2. void f(char*);
  3. f(33);
  4. f("hello" );
  5. f(NULL);

Reply

Marsh Posté le 23-09-2003 à 08:52:48    

J'utilise un truc comme ca pour mes pointeurs invalides (Taz tes commentaires sont les bienvenus) :
 

Code :
  1. template<typename T> T* invalidPtr()
  2. {
  3.   return reinterpret_cast<T*>(0xDEADBEEF);
  4. };
  5. char* toto;
  6. MaClasse* bad = invalidPtr<MaClasse>();
  7. if( toto == invalidPtr<char>() )
  8.   std::cout << "Pointeur invalide" << std::endl;

Reply

Marsh Posté le 23-09-2003 à 09:13:15    

merci antp (a tous en fait), mais j'ai un ptit pb, deja j'ai tout codé sur VC++ avec MFC...
et en plus, ce n'est pas une page en HTML mais c'est sous la formie d'une dll, www.bidule.fr/ismona.dll/truc?bob=5000 ...
 
vous connaissez ca...?
 
alors pour recuperer cette page, je le fais a la bourrin...je l'affiche ac un shellexec, ensuite je selectionne tout ac les evenement, je copie, j'ouvre notepad et je colle...
 
je voudrais faire ca proprement quoi ;-)!
 
merci pour tout!


---------------
http://husiana.myftp.org/phpsysinfo
Reply

Marsh Posté le 23-09-2003 à 09:22:33    

husiana a écrit :


et en plus, ce n'est pas une page en HTML mais c'est sous la formie d'une dll, www.bidule.fr/ismona.dll/truc?bob=5000 ...


 
ça te renvoie quand même une page HTML, c'est pareil normalement


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-09-2003 à 09:27:08    

dac, merci, et ton code va compiler sous VC++ ? (pas encore eu le tps d'essayer...)

Reply

Marsh Posté le 23-09-2003 à 09:28:39    

husiana a écrit :

dac, merci, et ton code va compiler sous VC++ ? (pas encore eu le tps d'essayer...)


non

Reply

Marsh Posté le 23-09-2003 à 09:33:32    

triste :-/!
 
je compile que ca en Bc++ et je fais un shell exec a partir de mon VC++! lol!

Reply

Marsh Posté le 23-09-2003 à 09:42:42    

TIdHTTP *bidule = new TIdHTTP.create(NULL);
 
===> il ne connais pas TIdHTTP, y'a une include special...?
 
merci pour tout


---------------
http://husiana.myftp.org/phpsysinfo
Reply

Marsh Posté le 23-09-2003 à 09:50:24    

husiana a écrit :

TIdHTTP *bidule = new TIdHTTP.create(NULL);
 
===> il ne connais pas TIdHTTP, y'a une include special...?
 
merci pour tout


 

antp a écrit :

en C++Builder :
 

TIdHTTP *bidule = new TIdHTTP(0);
AnsiString page;
page = bidule->Get("htpp://bidule.com/page.html" );
delete bidule;




 
Quel compilo tu utilises?

Reply

Marsh Posté le 23-09-2003 à 09:52:27    

borland c++ 5
 
c mal :-/ ?

Reply

Marsh Posté le 23-09-2003 à 09:54:36    

husiana a écrit :

borland c++ 5
 
c mal :-/ ?


bah non...c'est juste que sont truc existe pas sous autre chose que  BC++... [:skeye]  
Regarde dans la doc, ca devrait être indiqué comment te servir de son brol!

Reply

Marsh Posté le 23-09-2003 à 09:56:10    

Si t'as deja fait de la prog socket, et en cherchant comment ca marche le http, ca doit se faire en 1h.
 
edit:
ptet plus qu'1h, ca fouette vraiment trop le http. mais ca marche je confirme.


Message édité par Konar le 23-09-2003 à 10:10:43
Reply

Marsh Posté le 23-09-2003 à 09:56:13    

vi, j'utilise VC++ d'ab...!
je viens de compiler une premiere fois ac BC++ et comme toute les premieres fois, Make failed...

Reply

Marsh Posté le 23-09-2003 à 09:58:06    

husiana a écrit :

borland c++ 5
 
c mal :-/ ?


 
c'est pas pour C++5, c'est pour C++Builder (ce sont deux produits différents)
et si tu as une version antérieure à la 6 il faut downloader les composants Indy séparément (delphi indy dans google)


Message édité par antp le 23-09-2003 à 09:58:25

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-09-2003 à 10:14:15    

c'est pas un compilo de borland c++ builder ?

Reply

Marsh Posté le 23-09-2003 à 10:15:41    

si c'est le compilateur, mais faut les librairies (VCL) qui vont avec, et aussi un compilateur Delphi pour Indy (intégré dans C++Builder).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-09-2003 à 10:17:40    

t'as pas un lien pour le DL, j'ai pas envie de m'inscrire sur borland...

Reply

Marsh Posté le 23-09-2003 à 10:22:00    

je suppose que tu as regardé dans la MSDN pour savoir si la MFC proposait une classe permettant le telechargement de page HTML ?

Reply

Marsh Posté le 23-09-2003 à 10:22:00    

husiana a écrit :

t'as pas un lien pour le DL, j'ai pas envie de m'inscrire sur borland...
 


 
heu c'est un truc payant normalement hein :heink: puis t'es pas obligé d'utiliser ça; y a moyen de faire des appels à IE pour downloader un fichier (une dizaine de lignes de code il me semble), mais je ne sais plus comment.


Message édité par antp le 23-09-2003 à 10:22:21

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-09-2003 à 10:25:06    

antp a écrit :


 
heu c'est un truc payant normalement hein :heink: puis t'es pas obligé d'utiliser ça; y a moyen de faire des appels à IE pour downloader un fichier (une dizaine de lignes de code il me semble), mais je ne sais plus comment.


 
les fonctions WinInet, comme InternetOpenUrl() ou InternetReadFile()

Reply

Marsh Posté le 23-09-2003 à 11:40:49    

j'ai essayé wininet, alors tout compile niquel, et tt fonctionne presque niquel...:-/!
 
mon buff est vide, voila le code:

Code :
  1. char buff[1024];
  2. DWORD dwRead;
  3. BOOL bRet;
  4. HINTERNET hInternet;
  5. HINTERNET hHttp;
  6. hInternet = ::InternetOpen("BOB", INTERNET_OPEN_TYPE_PRECONFIG , NULL, NULL, 0);
  7.  if(!hInternet)
  8.    MessageBox(Dlg,"Internet open error! Test your system and try again.","42",MB_OK | MB_ICONERROR);
  9.   hHttp = ::InternetOpenUrl(hInternet, "http://www.tomshardware.fr/", NULL, NULL, INTERNET_FLAG_RELOAD, Context);
  10.  if(!hHttp)
  11.   MessageBox(Dlg,"URL open error!","42", MB_OK | MB_ICONERROR );
  12.  if(hInternet)
  13.   InternetCloseHandle(hInternet);
  14.  bRet = ::InternetReadFile(hHttp, buff, 1024, &dwRead);
  15.  if(hHttp)
  16.   InternetCloseHandle(hHttp);
  17.  if(hInternet)
  18.   InternetCloseHandle(hInternet);
  19.  MessageBox(Dlg,buff,"42", MB_OK);


 
PS: il ne faut pas oublier de mettre winInet.lib et #include <wininet.h>
 
pk mon buff est-il vide :'( ?


Message édité par husiana le 23-09-2003 à 11:41:58

---------------
http://husiana.myftp.org/phpsysinfo
Reply

Marsh Posté le 23-09-2003 à 13:04:36    

husiana a écrit :


pk mon buff est-il vide :'( ?


 
ben paske tu rates fort :  
deja t'aurais testé ton bRet avec un GetLastError() ca t'aurait indiqué la source de l'erreur.
et y a 2 fois InternetCloseHandle() aussi.

Reply

Marsh Posté le 23-09-2003 à 13:23:04    

comment on test bRet ac GetLastError() stp...?
 
et si y'a deux fois InternetCloseHandle() c'est que j'en ai deux a fermer...? non?!


---------------
http://husiana.myftp.org/phpsysinfo
Reply

Marsh Posté le 23-09-2003 à 13:41:14    

husiana a écrit :

comment on test bRet ac GetLastError() stp...?
 
et si y'a deux fois InternetCloseHandle() c'est que j'en ai deux a fermer...? non?!


 
euh... tu te foutrais pas de ma gueule la ?
comment tester un BOOL ? ben je dirais comme une autre variable.
 

Code :
  1. if (bRet == TRUE)
  2. {
  3.   // Success
  4. }
  5. else
  6. {
  7.   // Failure
  8.   DWORD dwErr = GetLAstError();
  9.   // tu affiches dwErr (demerdes toi, en plus t'as l'air de faire du C nan ?)
  10. }


 
et pour le InternetCloseHandle(), faut l'appeler seulement quand t'as terminé les opérations sur ta session, et y en a bien 1 de trop (je vois qu'un seul InternetOpen())
.

Reply

Marsh Posté le 23-09-2003 à 13:42:58    

vi, je fais du C/UNIX, pas du C++/windows :-/!
 
merci

Reply

Marsh Posté le 23-09-2003 à 13:48:31    

husiana a écrit :

vi, je fais du C/UNIX, pas du C++/windows :-/!
 
merci


 
toi t'es dans un bahut de merde.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed