Bonjour cher journal,
Mon projet de chat avance toujours un peu plus chaque jour.
Aujourd'hui, j'ai implémenter une fonction fait-maison pour recuperer l'adresse de mon serveur, pour que les clients, quelque soit leur lieu, trouve mon serveur tout seul comme des grands.
ma fonction se résume a un truc de ce genre :
system("echo `lynx -dump -accept_all_cookies http://membres.lycos.fr/****/index.php(...) | grep albert` | cut -d' ' -f2 > /tmp/chat.tmp");
Voilà, ensuite le client va chercher dans le fichier l'adresse et s'y connecte.
Bon comme vous pouvez le constater, ca nécéssite lynx, et ca nécéssite aussi un appel a la commande system, que j'affectionne pas trop.
Donc je voulais savoir s'il etait possible de se connecter a la page web directement via sys/socket.h afin de recuper le code html et de le manipuler ensuite a sa guise, et si quelqu'un avait déjà réussi la manoeuvre (sans passer par des bibliotheques spéciales, j'aimerai beaucoup rester dans la manipulation de socket.h)
Voilà, si quelqu'un s'ennuit et veut bien m'aider un ti peu :-)
Merci d'avance
# Re: intercepter le html a la volé
Posté par Mathieu Pillard (site web personnel) . Évalué à 1.
[^] # Re: intercepter le html a la volé
Posté par cho7 . Évalué à 1.
C'est un chat, qui pour l'instant marche très bien, mais dans lequel il subsite cette instruction system que je souhaite remplacer, de maniere a pouvoir arriver au meme resultat, meme lorsque la machine cliente n'aura pas lynx d'installé.
Voilà tout.
Pour ce qui est du long, fastidieux, et pas du tout passionnant, bah je prend le risque quand meme :-)
[^] # Re: intercepter le html a la volé
Posté par popopo333 . Évalué à 1.
# Re: intercepter le html a la volé
Posté par cassecou . Évalué à 1.
Tu sais manipuler des sockets ?
C'est le protocole HTTP(/1.1) qui t'effraie ?
Tout est là : http://www.faqs.org/rfcs/rfc2616.html(...)
Tu n'attends pas de nous qu'on te code tout quand même ? :p
[^] # Re: intercepter le html a la volé
Posté par cho7 . Évalué à 1.
Tu n'attends pas de nous qu'on te code tout quand même ? :p
Bah puisque t'en parles :-D
Non plus serieusement, j'ai essayé de voir comment réagissait les serveurs web quand on se connectait a eux, et qu'on affichait de maniere brute toutes les infos recues.
Je pensais un peu naivement car j'y connais rien, que les serveurs web se contentait d'envoyer a chaque client la totalité des pages demandées de maniere brut (a savoir le code html), et que c'etait donc au client de gerer ensuite ce qu'il en faisait.
Mais si je me connecte a un serveur web tel que google.fr, il ne se passe strictement rien, donc que dois je faire pour qu'il m'envoi le code source de la page ? une commande précise ?
[^] # Re: intercepter le html a la volé
Posté par Toto . Évalué à 1.
Ex :
telnet google.com 80
[..]
GET /index.html HTTP/1.1
HTTP/1.1 302 Found
Location: http://www.google.fr/cxfer?c=PREF%3D:TM%3D1081092580:S%3DP0zZrduOm-(...)
Set-Cookie: PREF=ID=0ce68c2b345ed450:CR=1:TM=1081092580:LM=1081092580:S=VTKuDv01uQmwp7pF; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Content-Type: text/html
Server: GWS/2.1
Content-length: 203
Date: Sun, 04 Apr 2004 15:29:40 GMT
302 Moved
302 Moved
The document has moved
here.
[^] # Re: intercepter le html a la volé
Posté par L. R. . Évalué à 1.
GET /... HTTP/1.1
Host: www.google.com
Sinon si tu es sur un serveur avec des vhosts ça marchera pas. C'est le stricte minimum, ça.
[^] # Re: intercepter le html a la volé
Posté par passant·e . Évalué à 1.
tu es sûr que tu as cherché?
tu es sûr que c'est une bonne idée??
pkoi tu ne fous pas ta config dans un fichier texte???
Je trolle dès quand ça parle business, sécurité et sciences sociales
[^] # Re: intercepter le html a la volé
Posté par kolter (site web personnel, Mastodon) . Évalué à 2.
bon admettons que tu veuilles le contenu de la page html http://www.google.fr/about.html(...)
tu fais une connection à l'hote www.google.fr sur le port 80 (port classique pour http)
si tu veux faire un essai tu fais : "telnet www.google.fr 80"
ensuite il te dit :
Trying 64.233.167.99...
Connected to www.google.fr.
Escape character is '^]'.
ensuite tu tapes : "GET /about.html HTTP/1.1" suivi de 2 retours chariot
il t'affiche donc le contenu de : http://www.google.fr/about.html(...)
HTTP/1.1 200 OK
Content-Type: text/html
Last-Modified: Fri, 02 Apr 2004 01:20:24 GMT
Set-Cookie: PREF=ID=33ddff4717cdd806:TM=1081092848:LM=1081092848:S=sWfOpzwO3ucQAG6s; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Server: GWS/2.1
Content-length: 9938
Date: Sun, 04 Apr 2004 15:34:08 GMT
<HTML>
<HEAD>
<TITLE>About Google</TITLE>
<style>
<!--
body,td,font,p,a{font-family:arial,sans-serif}
//-->
</style>
[ coupure ]
Google <a href="privacy.html">Privacy Policy</a> - <a href="terms_of_service.html">Terms
of Service</a></font> </td>
</tr>
</table>
</center>
</body>
</HTML>
tu remarqueras en début de réponse les entêtes http... puis le contenu qui suit...
maintenant comment faire ça en C :
// tu crées le/la socket pour se connecter sur l'hôte www.google.fr sur le port 80...
soc = socket( structure qui va bien, tous ça, tous ça)
// ensuite tu ecrit ta requete sur le/la socket
write(soc, "GET /about.html HTTP/1.1\r\n", taille_en_octets__de("GET /about.html HTTP/1.1\r\n")
// t'attends de lire la réponse :
read(soc, buffer, taille_que_tu_veux)
a tous ça s'ajoute les controles d'erreurs, dans ce que tu recois du dois séparer les entêtes du contenu a priori séparér par deux "\n\n" consécutifs mais vaut mieux jeter un coup d'oeil à la RFC du protocole.....
dans les entetes se trouvent aussi la tailles du "contenu html" à lire .....
voila, voila ....
M.
[^] # Re: intercepter le html a la volé
Posté par kolter (site web personnel, Mastodon) . Évalué à 1.
M.
[^] # Re: intercepter le html a la volé
Posté par cho7 . Évalué à 1.
C'est vrai que je connaissai pas trop le protocole html, mais quand on le connait, c'est tout de suite beaucoup plus simple !!
Donc Merci(bis) a toi et aux autres pour votre aide :-)
[^] # Re: intercepter le html a la volé
Posté par cho7 . Évalué à 1.
Pour pouvoir la voir sans me faire jetter, je dois tapper :
telnet membres.lycos.fr 80
GET /mon_compte/ma_page.php HTTP/1.1
Host; membres.lycos.fr
Je ne sais pas pourquoi pour le test google c'etait OK mais sans hostname alors que pour ma page je dois le préciser. Bref si quelqu'un le sait, pour ma culture personnelle je veux bien savoir :-)
[^] # Re: intercepter le html a la volé
Posté par Volnai . Évalué à 1.
[^] # Re: intercepter le html a la volé
Posté par Edouard Gomez (site web personnel) . Évalué à 1.
Ca fait deja au moins 2 posts qui disent "2 retours chariot". Et la je proteste ! :-)
Soit on fait du HTTP/1.0 et alors les 2 retours chariots sont corrects.
Soit on fait du HTTP/1.1 et on doit obligatoirement mettre une ligne Host: server.com.
Voir chapitre 14.23 Host du document http://www.faqs.org/rfcs/rfc2616.html.(...)
Quote:
A client MUST include a Host header field in all HTTP/1.1 request messages .
[^] # Re: intercepter le html a la volé
Posté par jigso . Évalué à 1.
# Re: intercepter le html a la volé
Posté par Boa Treize (site web personnel) . Évalué à 1.
Ce problème a été résolu depuis longtemps, on a créé tout un système pour ça, qui s'appelle le DNS (Domain Name Service ou System, je sais plus). Donc tu met l'adresse IP de ton serveur en face d'un nom bien à toi, et tes clients n'ont plus qu'à utiliser le nom. ;-)
Bien sûr, tu vas me dire que ton IP change tout le temps, et qu'un nom de domaine c'est cher. Réponse : http://www.dyndns.org/(...) pour récupérer un nom de domaine gratuit (enfin, pas un nom complet, un nom de type blablabla.dyndns.org ou blablabla.homelinux.org, bref tu as le choix du début, et une petite liste de choix pour le milieu et la fin). Comment mettre le nom de domaine à jour dès que ton IP change ? Réponse : http://ez-ipupdate.com/(...) .
Il y a deux ans je faisais comme toi (adresse IP stockée dans un fichier sur un compte Free), ça a été rigolo à coder, mais c'était quand même lourd. Je me sers de ce service depuis cette époque, j'en suis super content. :-)
[^] # Re: intercepter le html a la volé
Posté par cho7 . Évalué à 1.
Mais ceci dit, pour mon projet j'voulais un truc plus interessant, donc comme mon programme utilise plein pot les sockets jvoulais rester dans le meme domaine, et pas me contenter d'une simple redirection :-)
Et sinon pour info, mon nouveau bout de code marche très bien, et il me trouve l'ip en 0.2 seconde, ca va beaucoup plus vite que d'ouvrir lynx :), donc j'suis content !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.