Fonctionnement d'un navigateur

Résolu
Space_Monkey Messages postés 16 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 2 septembre 2007 - 25 févr. 2007 à 19:27
goebish Messages postés 92 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 24 novembre 2008 - 28 févr. 2007 à 14:20
Bonjour,

Mon but serait de faire visiter une page à mon programme, de manière completement transparente.(Inutile de me sortir ShellExecute();)
Je peux déjà récupérer le code html de cette page, le probleme est qu'il ne s'agit pas simplement de récupérer la page mais bien d'interagir avec elle comme si l'utilisateur l'ouvrait avec firefox ou iexplorer. Mais SANS ouvrir ce type d'explorateur puisque je veux que ce soi fait en arriere plan.
Je ne sais pas exactement ce que celà implique (redirections, cookies?) mais en tout cas mon code ne suffit pas à simuler une visite en bonne et due forme.

Voici deux méthodes que j'ai utiliser et qui sont visiblement insuffisantes, bien qu'elles me fournissent toutes les deux le code html de la page en question.

La premiere, avec winsock:
  send(W_IP, Buffer, strlen(Buffer), 0);  // on envoie la requete qui est contenue dans le buffer ("GET http://www.le-site-a-visiter.com HTTP/1.0\n\n")
  recv(W_IP, Buffer, sizeof(Buffer), 0);  // reste à récupérer le résultat, toujours dans le meme buffer

Et la deuxieme:
RLDownloadToFile(0,http://www.le-site-a-visiter.com,Buffer,0,0);

J'ai chercher mais les faq et dans les sources :) Mais bon cette info est - il est vrai - très spécifique et je n'ai trouver que des choses qui se rapprochaient du sujet sans pour autant l'aborder.
Merci d'avance!

PS: Je suis sous windows Xp et j'utilise BCB6

14 réponses

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
28 févr. 2007 à 13:47
Bonjour à tous !

J'ai trouvé comment faire.
Tout d'abord, il vaut mieux utiliser HTTP 1.1 que 1.0.
Cette version impose (au minimum) une requête de la forme :
"GET /dossier/sous-dossier/page.ext HTTP/1.1\r\nHost: adresse_serveur\r\n\r\n"
Notez que l'on met '\r\n' et non pas '\n' tout seul.
'adresse_serveur' peut-être de ces formes : www.machin.com ou machin.com.
C'est ce qu'il y a juste après 'http://'.
'/dossier/sous-dossier/page.ext' est ce qui suit 'adresse_serveur'.
Si l'adresse serveur est seule (http://www.machin.com), la requête sera comme ceci.
"GET / HTTP/1.1\r\nHost: www.machin.com\r\n\r\n"
Ensuite il ne reste qu'à gérer les redirections et le traitement de la page HTML quand on a enfin 'HTTP/1.1 200 OK'.
Avec la page du cas de Space_monkey, on a 3 redirections (code 302) en tout.

J'espère avoir été clair.
J'attends vos remarques.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
3
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
25 févr. 2007 à 20:12
salut

Je peux déjà récupérer le code html de cette page, le probleme est qu'il ne s'agit pas simplement de récupérer la page mais bien d'interagir avec elle comme si l'utilisateur l'ouvrait avec firefox ou iexplorer. Mais SANS ouvrir ce type d'explorateur puisque je veux que ce soi fait en arriere plan.

peux-tu préciser ? que cherches-tu à faire ?
0
Space_Monkey Messages postés 16 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 2 septembre 2007
25 févr. 2007 à 22:05
Et bien c'est en fait l'objet de ma question, que me manque-t-il pour simuler une visite avec un explorateur classique?
En fait la page visitée devrait réagir en incrémentant un compteur dont je ne connais pas le fonctionnement. Ce compteur s'incrémente correctement si je visite la page avec FireFox. Mais ma requete GET n'incrémente pas le compte. J'en déduis que Firefox va plus loin qu'un GET... mais quoi?
0
goebish Messages postés 92 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 24 novembre 2008
26 févr. 2007 à 13:21
Surement que ton compteur s'incrémente en telechargeant autre chose que cette page HTML, genre un element contenu dans cette page (une image ?)

Si tu poses ici ce que tu reçois dans ton buffer on pourras peut etre avancer un peu plus ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
goebish Messages postés 92 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 24 novembre 2008
26 févr. 2007 à 13:26
En fait quand ton butineur affiche une page (html+images) il ne fait pas qu'un seul GET, il en fait déja un premier pour prendre la page HTML et ensuite il analyse cette HTML pour faire d'autres GET (pour les images, cadres ....)
0
Space_Monkey Messages postés 16 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 2 septembre 2007
26 févr. 2007 à 22:40
Je t'envoie en pm le lien car sur le forum on pourrait prendre ca pour de la pub.
Je donnes quand meme le retour de la requete GET sur la page en question:

---Contenu de la page sur XXXXX.be---
HTTP/1.1 500 Internal Server Error
Date: Mon, 26 Feb 2007 21:22:35 GMT
Server: Apache
Last-Modified: Wed, 14 Dec 2005 14:45:54 GMT
ETag: "6ad6-257a-672cc80"
Accept-Ranges: bytes
Content-Length: 9594
Connection: close
Content-Type: text/html
Content-Language: en
------------------------------------

Alors qu'avec mon navigateur, je suis redirigé vers une autre page.. ya vraiment quelque chose qui m'échappe! Le code pour les redirection c'est 302 ou 301, je suis allé me renseigner sur cette erreur 500 et voilà ce que commentcamarche.com en dit:


<td>500</td>
<td>INTERNAL ERROR</td>
<td>Le serveur a rencontré une condition inattendue qui l'a empêché de donner suite à la demande (comme quoi il leur en arrive des trucs aux serveurs...)

Je partage l'avis des rédacteurs, il en arrive de ces trucs étranges.. Si quelqu'un veut effectuer les tests, je lui envoi le lien en pm.
</td>
0
goebish Messages postés 92 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 24 novembre 2008
26 févr. 2007 à 22:47
Déja si le serveur te renvoit une erreur 500 c'est que tu lui envoit une requete qui lui plait pas.

"GET http://www.le-site-a-visiter.com HTTP/1.0\n\n" est incorrect, il faudrait pluto quelque chose du genre:
"GET index.html HTTP/1.0\n\n"
0
Space_Monkey Messages postés 16 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 2 septembre 2007
26 févr. 2007 à 22:53
Heuu c'est moi ou j'ai vraiment réussi à écrire en dehors du cadre? :p
J'me croirais dans un vieux tuto de hack de pages mal codées..
Quoi qu'il en soit je vais prévenir un responsable
Réessayons, au cas ou?:

<td>500</td><td>INTERNAL ERROR</td><td>Le serveur a rencontré une condition inattendue qui l'a empêché de donner suite à la demande (comme quoi il leur en arrive des trucs aux serveurs...)</td>
0
goebish Messages postés 92 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 24 novembre 2008
26 févr. 2007 à 22:56
un bug du site ... vive .net ;)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 févr. 2007 à 23:10
.net n'est pas en cause, c'est cette daube de freetextbox qui fait le copier/coller de nimporte quoi.

ciao...
BruNews, MVP VC++
0
Space_Monkey Messages postés 16 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 2 septembre 2007
27 févr. 2007 à 19:41
Enfin, passons ^^
Pour en revenir à mon probleme et pour faire partager à tous ce que je disais en pm à goebish, je voudrais préciser que mon code fonctionne très bien avec google.com.
GET http://www.google.com HTTP/1.0
me donne un code 302 qui suggère une redirection vers Location: http://www.google.be
Mon
code, qui gère les redirections, lance alors une requete du meme type
vers google.be et la page est récupérée sans probleme avec un code 200
OK.
Mais apparament c'est pas aussi simple dans ce cas-ci.. Je sêche :/
0
Space_Monkey Messages postés 16 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 2 septembre 2007
28 févr. 2007 à 14:09
Yepaaa ^^ Merci beaucoup!!
Sans toi je crois que j'y serais pas arrivé, en fait à chaque fois j'oubliais un \r\n en fin de requete :'( et dire que j'me suis découragé, j'avais deja pas mal codé quand ce probleme est survenu, mais là je pense qu'il me manque pas grand chose pour enfin finaliser mon programme.
Encore un grand merci, si il y a quoi que ce soit que je puisse faire n'hésite pas à demander :P
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
28 févr. 2007 à 14:18
Ben en fait j'ai un découvert de 500 ?, alors si tu pouvais...
Plus sérieusement, tu comptes faire un navigateur ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0
goebish Messages postés 92 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 24 novembre 2008
28 févr. 2007 à 14:20
Non, il compte juste incrementer un compteur de visites artificiellement ;)
0
Rejoignez-nous