Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sockets et cookies

4 réponses
Avatar
Roger
Bonjour,
Je débute dans l'utilisation des sockets... Je me connecte sans problème au
site souhaité et je récupère dans le buffer de mon programme en C la
première page envoyée par le site (header + code HTML). Toutefois après
avoir sauvegardé la partie HTML de mon buffer dans un fichier, je récupère
ce fichier avec Firefox pour voir à quoi il ressemble et je m'aperçois que
ça n'est pas tout à fait la page qui s'affiche habituellement sur mon écran
lorsque je me connecte au même site directement avec Firefox.
Lorsque je me connecte directement avec Firefox j'ai une page propre avec
les champs où je dois saisir mon identifiant et mon mot de passe pour me
loguer bien positionnés. Avec mon buffer obtenu par l'utilisation des
sockets, il manque des images et des champs sur la page et les champs
présents ne sont pas correctement positionnés.
Pour investiguer, j'ai mis la console web en espion et j'ai regardé comment
fait Firefox lorsque je me connecte au site directement avec lui.
Et je m'aperçois que ça n'est pas étonnant qu'il y ait une différence car
avant que ma page correcte ne s'affiche, il y a une série d'échanges (GET)
entre Firefox et le site, alors que moi avec les sockets, je n'en fait qu'un
(le premier). J'en déduis, (ai-je raison ?) que Firefox analyse le premièr
buffer HTML reçu et qu'en fonction de son contenu, il renvoie d'autres
requêtes GET pour demander les images et autres champs qui sont signalés
dans ce code HTML mais dont les contenus sont encore absents.
De plus, je m'aperçois que dès sa première requête GET, Firefox envoie au
site un cookie qui n'a jamais la même valeur, je suppose là aussi (ai-je
raison ?) que ce cookie a été reçu par Firefox lors de sa précédente
connexion à ce site, qu'il l'a mémorisé et qu'il le ressort à la connexion
suivante.
Comme mon but avec mon programme en C, c'est de simuler ce que fait
l'utilisateur de Firefox lorsqu'il se connecte au site, j'ai plusieurs
questions.
1) Comment trouver et décoder (car je suppose qu'il est stocké mais codé
dans ma directory Cookies) le premier cookie que Firefox envoie au site afin
que j'en fasse autant ?
2) Je réalise que, en admettant que ma première question ait une réponse, je
pourrai probablement en procédant de la même manière simuler les GET
suivants envoyés par Firefox, mais j'y vois un inconvénient, c'est que si
entretemps le gestionnaire du site change des images ou des champs, mon
programme n'en sera pas automatiquement informé car, sauf à réécrire un
navigateur, il n'analyse pas le code HTML reçu et il réclamera toujours les
anciennes images. D'où la question suivante, j'ai entendu parler de "CURL"
et de "wininet", est-ce que ces library font tout simplement la même chose
que moi avec mes sockets, c'est à dire qu'en utilisant ces dll on récupère
simplement comme moi le premier buffer de l'unique GET, ce qui n'aurait
aucun intérêt pour moi, ou bien est-ce que ça va plus loin, c'est à dire que
ces dll analysent le code HTML reçu et comme Firefox génèrent
automatiquement les GET suivants pour récupérer les images et champs
manquants ?
3) J'ai trouvé curl, mais quel est SVP le site officiel pour télécharger
wininet.dll et wininet.h ? J'ai trouvé la doc de wininet englais mais en
interactif sur msdn, existe-t-elle en .pdf ou sous forme de fichier help et
éventuellement en français ?

Déolé d'avoir été si long, mais je craignais sans cela de ne pas être clair.
Merci

4 réponses

Avatar
Christian ASTOR
Roger a écrit :

2) Je réalise que, en admettant que ma première question ait une réponse, je
pourrai probablement en procédant de la même manière simuler les GET
suivants envoyés par Firefox, mais j'y vois un inconvénient, c'est que si
entretemps le gestionnaire du site change des images ou des champs, mon
programme n'en sera pas automatiquement informé car, sauf à réécrire un
navigateur, il n'analyse pas le code HTML reçu et il réclamera toujours les
anciennes images. D'où la question suivante, j'ai entendu parler de "CURL"
et de "wininet", est-ce que ces library font tout simplement la même chose
que moi avec mes sockets, c'est à dire qu'en utilisant ces dll on récupère
simplement comme moi le premier buffer de l'unique GET, ce qui n'aurait
aucun intérêt pour moi, ou bien est-ce que ça va plus loin, c'est à dire que
ces dll analysent le code HTML reçu et comme Firefox génèrent
automatiquement les GET suivants pour récupérer les images et champs
manquants ?



Pour simuler un login ou un POST ou GET quelconque, c'est assez simple avec
InternetOpen()-InternetConnect()-HttpOpenRequest()-HttpSendRequest()
puis HttpQueryInfo()-InternetReadFile(), ... pour lire le retour

J'utilise des tools comme HttpWatch ou ServiceCapture pour récupérer les
headers et les rejouer à l'identique
Avatar
Roger
Pour simuler un login ou un POST ou GET quelconque, c'est assez simple
avec
InternetOpen()-InternetConnect()-HttpOpenRequest()-HttpSendRequest()
puis HttpQueryInfo()-InternetReadFile(), ... pour lire le retour

J'utilise des tools comme HttpWatch ou ServiceCapture pour récupérer les
headers et les rejouer à l'identique



Merci, mais malheureusement je suis encore trop néophyte sur le sujet pour
voir dans ta réponse le rapport exact avec ma question. Si je comprends bien
ce que tu dis, c'est que toi tu utilises wininet pour faire les GET et les
POST que je fais avec les sockets. Ma question était : moi une fois que j'ai
fait un GET et obtenu un premier buffer avec un header et du code HTML, pour
générer les GETs suivants qui me permettront de récupérer les images
manquantes, il faudrait que j'analyse tout le code HTML reçu pour savoir ce
qu'il me faut demander. Donc ce que je demandais c'est si avec wininet (ou
CURL pour ceux qui utilisent CURL) cette analyse du code HTML reçu était
faite automatiquement et en conséquence les GETs permettant de récupérer les
images manquantes automatiquement générés ?
Mais comme je suis néophyte, il n'y a aucune garantie pour que ma question
ne soit pas idiote et qu'en fait la réponse à ma question soit déjà dans ta
réponse !

Je me permets de rajouter une question qui était déjà dans mon premier
message et qui a moins de risque de paraître sibylline: où peut-on
télécharger de manière sécurisée les dlll et les .h de wininet ? Y a-t-il
quelque part une doc en français ?
Merci
Avatar
Christian ASTOR
Roger a écrit :

Ma question était : moi une fois que j'ai fait un GET et obtenu un premier buffer avec un header et du code HTML, pour
générer les GETs suivants qui me permettront de récupérer les images
manquantes, il faudrait que j'analyse tout le code HTML reçu pour savoir ce
qu'il me faut demander. Donc ce que je demandais c'est si avec wininet (ou
CURL pour ceux qui utilisent CURL) cette analyse du code HTML reçu était
faite automatiquement et en conséquence les GETs permettant de récupérer les
images manquantes automatiquement générés ?
Mais comme je suis néophyte, il n'y a aucune garantie pour que ma question
ne soit pas idiote et qu'en fait la réponse à ma question soit déjà dans ta
réponse !



Avec les apis Wininet que j'ai mentionnées, tout est géré; c'est comme
si l'on recréait son propre browser vu qu'on récupère exactement le même
source que lui (on le vérifie avec HTTPWatch)
Je m'en sers pour automatiser les connexions sécurisées (HTTPS), après
avoir récupéré les bons headers avec HTTPWatch

Je me permets de rajouter une question qui était déjà dans mon premier
message et qui a moins de risque de paraître sibylline: où peut-on
télécharger de manière sécurisée les dlll et les .h de wininet ? Y a-t-il
quelque part une doc en français ?



Il n'y a rien à télécharger, c'est inclus dans le SDK Windows
Il faut juste linker :
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
Avatar
Roger

Avec les apis Wininet que j'ai mentionnées, tout est géré; c'est comme si
l'on recréait son propre browser vu qu'on récupère exactement le même
source que lui (on le vérifie avec HTTPWatch)
Je m'en sers pour automatiser les connexions sécurisées (HTTPS), après
avoir récupéré les bons headers avec HTTPWatch

Il n'y a rien à télécharger, c'est inclus dans le SDK Windows
Il faut juste linker :
#include <wininet.h>
#pragma comment(lib, "wininet.lib")



Merci