OVH Cloud OVH Cloud

récupérer de l'html par winsock

15 réponses
Avatar
seb-seb
bonjour
je voudrais récupérer tout le code html d'un site pour en utiliser une
partie
j'arrive bien à me connecter au site, il me renvoie du code mais ce code
contient une frame
et je sais pas comment la récupérer cette frame
car moi la connexion s'arrete apres les quelques lignes ...
merci

10 réponses

1 2
Avatar
Jean-Marc
"seb-seb" a écrit dans le message de
news:
bonjour
je voudrais récupérer tout le code html d'un site pour en utiliser une
partie
j'arrive bien à me connecter au site, il me renvoie du code mais ce code
contient une frame
et je sais pas comment la récupérer cette frame
car moi la connexion s'arrete apres les quelques lignes ...
merci



Hello,

Il faudrait voir l'URL de ce que tu veux récupérer, et aussi comment
tu récupères la page. Envoies tu un GET sur le port 80
sur le domaine concerné?

Bref, avec un peu de détails on peut certainement t'aider.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
seb-seb
Jean-Marc a écrit :
"seb-seb" a écrit dans le message de
news:

bonjour
je voudrais récupérer tout le code html d'un site pour en utiliser une
partie
j'arrive bien à me connecter au site, il me renvoie du code mais ce code
contient une frame
et je sais pas comment la récupérer cette frame
car moi la connexion s'arrete apres les quelques lignes ...
merci




Hello,

Il faudrait voir l'URL de ce que tu veux récupérer, et aussi comment
tu récupères la page. Envoies tu un GET sur le port 80
sur le domaine concerné?

Bref, avec un peu de détails on peut certainement t'aider.



c'est vrai que j'aurais pu étoffer un peu plus
en fait avant de commencer j'ai ouvert un port 80 et dans firefox j'ai
ouvert mon ip
j'ia donc récupérer une syntaxe d'envoie
apres j'ai repris cette syntaxe pour voir à quoi ressemblait une réponse

donc ca donne ca
Private Sub reso_Connect()
reso.SendData _
"GET / HTTP/1.1" & vbCrLf & _
"Host: www.ogame.fr" & vbCrLf & _
"User-Agent: moi-test " & vbCrLf & _
"Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
& vbCrLf & _
"Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3" & vbCrLf & _
"Accept -Encoding: gzip , deflate" & vbCrLf & _
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" & vbCrLf & _
"Keep-Alive: 300" & vbCrLf & _
"Connection: keep -alive" & vbCrLf & vbCrLf

mais cet idiot de site renvoie 5 lignes dont
<frame name="mainframe" src="/index.php?frameset=1" frameborder="0"
scrolling="yes" noresize>

donc j'imagine qu'un browser normal quand y voit ca il relance une
requete pour avoir la frame ...
Avatar
Jean-Marc
"seb-seb" a écrit dans le message de
news:eJ5k$
Jean-Marc a écrit :
> "seb-seb" a écrit dans le message de
> news:
>
>>bonjour
>>je voudrais récupérer tout le code html d'un site pour en utiliser une
>>partie
>>j'arrive bien à me connecter au site, il me renvoie du code mais ce code
>>contient une frame
>>et je sais pas comment la récupérer cette frame
>>car moi la connexion s'arrete apres les quelques lignes ...
>>merci
>
>
> Hello,
>
> Il faudrait voir l'URL de ce que tu veux récupérer, et aussi comment
> tu récupères la page. Envoies tu un GET sur le port 80
> sur le domaine concerné?
>
> Bref, avec un peu de détails on peut certainement t'aider.

c'est vrai que j'aurais pu étoffer un peu plus
en fait avant de commencer j'ai ouvert un port 80 et dans firefox j'ai
ouvert mon ip
j'ia donc récupérer une syntaxe d'envoie
apres j'ai repris cette syntaxe pour voir à quoi ressemblait une réponse

donc ca donne ca
Private Sub reso_Connect()
reso.SendData _
"GET / HTTP/1.1" & vbCrLf & _
"Host: www.ogame.fr" & vbCrLf & _
"User-Agent: moi-test " & vbCrLf & _
"Accept:



text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q 0.8,image/png,*/*;q=0.5"
& vbCrLf & _
"Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3" & vbCrLf & _
"Accept -Encoding: gzip , deflate" & vbCrLf & _
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" & vbCrLf & _
"Keep-Alive: 300" & vbCrLf & _
"Connection: keep -alive" & vbCrLf & vbCrLf

mais cet idiot de site renvoie 5 lignes dont
<frame name="mainframe" src="/index.php?frameset=1" frameborder="0"
scrolling="yes" noresize>

donc j'imagine qu'un browser normal quand y voit ca il relance une
requete pour avoir la frame ...



Ok je me doutais bien de qq chose comme cela. En effet, tu as raison.
Un browser va générer autant de GET qu'il y a de liens à résoudre sur
la page. C'est la même chose quand il y a des images. QUand le
navigateur trouve du code HTML du genre <img src="./truc.jpg"></img>,
il génère un GET pour récupérer l'image. Les serveurs ne font que
répondre à une suite de GET et ils servent "bêtement" les ressources
qui leur sont demandées.

Note: pour tes tests, tu n'as pas besoin d'un GET si compliqué. En fait,
"GET / HTTP/1/1" & vbcrlf est suffisant.

Si tu veux faire le boulot du navigateur (donc d'un client HTTP), tu
dois décoder le html et générer tous les GET nécessaires. C'est pour
cela qu'écrire un serveur HTTP (cf ma signature) est plus "facile"
qu'écrire un client :-) (je ne parle même pas de l'affichage du html
proprement dit)

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
seb-seb
Jean-Marc a écrit :
"seb-seb" a écrit dans le message de
news:eJ5k$

Jean-Marc a écrit :

"seb-seb" a écrit dans le message de
news:


bonjour
je voudrais récupérer tout le code html d'un site pour en utiliser une
partie
j'arrive bien à me connecter au site, il me renvoie du code mais ce code
contient une frame
et je sais pas comment la récupérer cette frame
car moi la connexion s'arrete apres les quelques lignes ...
merci




Hello,

Il faudrait voir l'URL de ce que tu veux récupérer, et aussi comment
tu récupères la page. Envoies tu un GET sur le port 80
sur le domaine concerné?

Bref, avec un peu de détails on peut certainement t'aider.



c'est vrai que j'aurais pu étoffer un peu plus
en fait avant de commencer j'ai ouvert un port 80 et dans firefox j'ai
ouvert mon ip
j'ia donc récupérer une syntaxe d'envoie
apres j'ai repris cette syntaxe pour voir à quoi ressemblait une réponse

donc ca donne ca
Private Sub reso_Connect()
reso.SendData _
"GET / HTTP/1.1" & vbCrLf & _
"Host: www.ogame.fr" & vbCrLf & _
"User-Agent: moi-test " & vbCrLf & _
"Accept:




text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q > 0.8,image/png,*/*;q=0.5"

& vbCrLf & _
"Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3" & vbCrLf & _
"Accept -Encoding: gzip , deflate" & vbCrLf & _
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" & vbCrLf & _
"Keep-Alive: 300" & vbCrLf & _
"Connection: keep -alive" & vbCrLf & vbCrLf

mais cet idiot de site renvoie 5 lignes dont
<frame name="mainframe" src="/index.php?frameset=1" frameborder="0"
scrolling="yes" noresize>

donc j'imagine qu'un browser normal quand y voit ca il relance une
requete pour avoir la frame ...




Ok je me doutais bien de qq chose comme cela. En effet, tu as raison.
Un browser va générer autant de GET qu'il y a de liens à résoudre sur
la page. C'est la même chose quand il y a des images. QUand le
navigateur trouve du code HTML du genre <img src="./truc.jpg"></img>,
il génère un GET pour récupérer l'image. Les serveurs ne font que
répondre à une suite de GET et ils servent "bêtement" les ressources
qui leur sont demandées.

Note: pour tes tests, tu n'as pas besoin d'un GET si compliqué. En fait,
"GET / HTTP/1/1" & vbcrlf est suffisant.

Si tu veux faire le boulot du navigateur (donc d'un client HTTP), tu
dois décoder le html et générer tous les GET nécessaires. C'est pour
cela qu'écrire un serveur HTTP (cf ma signature) est plus "facile"
qu'écrire un client :-) (je ne parle même pas de l'affichage du html
proprement dit)



et c'est où que je précise ce que je veux ?
c'est dans le winsock.connet ou dans le GET ?
et dans mon exemple quel est la requete à faire ?
parce que moi l'avantage c'est que je voudrais juste quelques valeurs et
non pas affiché le site
Avatar
Jean-Marc
> seb-seb" a écrit dans le message de


news:
Jean-Marc a écrit :
> "seb-seb" a écrit dans le message de
> news:eJ5k$
>
>>Jean-Marc a écrit :
>>
>>>"seb-seb" a écrit dans le message de
>>>news:
>>>
>>>
>>>>bonjour
>>>>je voudrais récupérer tout le code html d'un site pour en utiliser une
>>>>partie
>>>>j'arrive bien à me connecter au site, il me renvoie du code mais ce


code
>>>>contient une frame
>>>>et je sais pas comment la récupérer cette frame
>>>>car moi la connexion s'arrete apres les quelques lignes ...
>>>>merci
>>>
>>>
>>>Hello,
>>>
>>>Il faudrait voir l'URL de ce que tu veux récupérer, et aussi comment
>>>tu récupères la page. Envoies tu un GET sur le port 80
>>>sur le domaine concerné?
>>>
>>>Bref, avec un peu de détails on peut certainement t'aider.
>>
>>c'est vrai que j'aurais pu étoffer un peu plus
>>en fait avant de commencer j'ai ouvert un port 80 et dans firefox j'ai
>>ouvert mon ip
>>j'ia donc récupérer une syntaxe d'envoie
>>apres j'ai repris cette syntaxe pour voir à quoi ressemblait une réponse
>>
>>donc ca donne ca
>>Private Sub reso_Connect()
>>reso.SendData _
>>"GET / HTTP/1.1" & vbCrLf & _
>>"Host: www.ogame.fr" & vbCrLf & _
>>"User-Agent: moi-test " & vbCrLf & _
>>"Accept:
>>
>
>


text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q > > 0.8,image/png,*/*;q=0.5"
>
>>& vbCrLf & _
>>"Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3" & vbCrLf & _
>>"Accept -Encoding: gzip , deflate" & vbCrLf & _
>>"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" & vbCrLf & _
>>"Keep-Alive: 300" & vbCrLf & _
>>"Connection: keep -alive" & vbCrLf & vbCrLf
>>
>>mais cet idiot de site renvoie 5 lignes dont
>><frame name="mainframe" src="/index.php?frameset=1" frameborder="0"
>>scrolling="yes" noresize>
>>
>>donc j'imagine qu'un browser normal quand y voit ca il relance une
>>requete pour avoir la frame ...
>
>
> Ok je me doutais bien de qq chose comme cela. En effet, tu as raison.
> Un browser va générer autant de GET qu'il y a de liens à résoudre sur
> la page. C'est la même chose quand il y a des images. QUand le
> navigateur trouve du code HTML du genre <img src="./truc.jpg"></img>,
> il génère un GET pour récupérer l'image. Les serveurs ne font que
> répondre à une suite de GET et ils servent "bêtement" les ressources
> qui leur sont demandées.
>
> Note: pour tes tests, tu n'as pas besoin d'un GET si compliqué. En fait,
> "GET / HTTP/1/1" & vbcrlf est suffisant.
>
> Si tu veux faire le boulot du navigateur (donc d'un client HTTP), tu
> dois décoder le html et générer tous les GET nécessaires. C'est pour
> cela qu'écrire un serveur HTTP (cf ma signature) est plus "facile"
> qu'écrire un client :-) (je ne parle même pas de l'affichage du html
> proprement dit)

et c'est où que je précise ce que je veux ?
c'est dans le winsock.connet ou dans le GET ?
et dans mon exemple quel est la requete à faire ?
parce que moi l'avantage c'est que je voudrais juste quelques valeurs et
non pas affiché le site



En fait c'est assez simple, tout en pouvant devenir un peu compliqué.
Tu fais ton premier GET, tel que tui la fais, et tu récupères ta page HTML.
Puis tu dois parser cette page, en recherchant tous les "src=""
De la tu récupères les liens pointés par les src, par exemple dans ton
exemple:
src="/index.php?frameset=1" , et bien tu récupères ce qui est entre les
guillements après le src= et tu fais le GET correspondant:
GET /index.php?frameset=1 HTTP/1/1 & vbcrlf

Tu dois faire cela pour chaque src= rencontré sur ta page.

LA ou les choses devienneent amusantes, c'est que le code HTML retourné
par les GET peuvent à leur tour contenir des src=, qu'il faut parser, etc.

Bref, 2 solutions: tu stockes dans des tableaux les src= et tu parcours
ensuite (simple, mais un peu bourrin) soit tu fais une jolie focntion
récursive (fun mais pas sans rique et nettement plus compliqué: attention
aux conditions de sortie ...)

Si ce n'est pas clair, je pourrais sans doute faire un mini exemple.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
seb-seb
Jean-Marc a écrit :
seb-seb" a écrit dans le message de



news:

Jean-Marc a écrit :

"seb-seb" a écrit dans le message de
news:eJ5k$


Jean-Marc a écrit :


"seb-seb" a écrit dans le message de
news:



bonjour
je voudrais récupérer tout le code html d'un site pour en utiliser une
partie
j'arrive bien à me connecter au site, il me renvoie du code mais ce











code

contient une frame
et je sais pas comment la récupérer cette frame
car moi la connexion s'arrete apres les quelques lignes ...
merci




Hello,

Il faudrait voir l'URL de ce que tu veux récupérer, et aussi comment
tu récupères la page. Envoies tu un GET sur le port 80
sur le domaine concerné?

Bref, avec un peu de détails on peut certainement t'aider.



c'est vrai que j'aurais pu étoffer un peu plus
en fait avant de commencer j'ai ouvert un port 80 et dans firefox j'ai
ouvert mon ip
j'ia donc récupérer une syntaxe d'envoie
apres j'ai repris cette syntaxe pour voir à quoi ressemblait une réponse

donc ca donne ca
Private Sub reso_Connect()
reso.SendData _
"GET / HTTP/1.1" & vbCrLf & _
"Host: www.ogame.fr" & vbCrLf & _
"User-Agent: moi-test " & vbCrLf & _
"Accept:









text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q >
0.8,image/png,*/*;q=0.5"


& vbCrLf & _
"Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3" & vbCrLf & _
"Accept -Encoding: gzip , deflate" & vbCrLf & _
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" & vbCrLf & _
"Keep-Alive: 300" & vbCrLf & _
"Connection: keep -alive" & vbCrLf & vbCrLf

mais cet idiot de site renvoie 5 lignes dont
<frame name="mainframe" src="/index.php?frameset=1" frameborder="0"
scrolling="yes" noresize>

donc j'imagine qu'un browser normal quand y voit ca il relance une
requete pour avoir la frame ...




Ok je me doutais bien de qq chose comme cela. En effet, tu as raison.
Un browser va générer autant de GET qu'il y a de liens à résoudre sur
la page. C'est la même chose quand il y a des images. QUand le
navigateur trouve du code HTML du genre <img src="./truc.jpg"></img>,
il génère un GET pour récupérer l'image. Les serveurs ne font que
répondre à une suite de GET et ils servent "bêtement" les ressources
qui leur sont demandées.

Note: pour tes tests, tu n'as pas besoin d'un GET si compliqué. En fait,
"GET / HTTP/1/1" & vbcrlf est suffisant.

Si tu veux faire le boulot du navigateur (donc d'un client HTTP), tu
dois décoder le html et générer tous les GET nécessaires. C'est pour
cela qu'écrire un serveur HTTP (cf ma signature) est plus "facile"
qu'écrire un client :-) (je ne parle même pas de l'affichage du html
proprement dit)



et c'est où que je précise ce que je veux ?
c'est dans le winsock.connet ou dans le GET ?
et dans mon exemple quel est la requete à faire ?
parce que moi l'avantage c'est que je voudrais juste quelques valeurs et
non pas affiché le site




En fait c'est assez simple, tout en pouvant devenir un peu compliqué.
Tu fais ton premier GET, tel que tui la fais, et tu récupères ta page HTML.
Puis tu dois parser cette page, en recherchant tous les "src=""
De la tu récupères les liens pointés par les src, par exemple dans ton
exemple:
src="/index.php?frameset=1" , et bien tu récupères ce qui est entre les
guillements après le src= et tu fais le GET correspondant:
GET /index.php?frameset=1 HTTP/1/1 & vbcrlf

Tu dois faire cela pour chaque src= rencontré sur ta page.

LA ou les choses devienneent amusantes, c'est que le code HTML retourné
par les GET peuvent à leur tour contenir des src=, qu'il faut parser, etc.

Bref, 2 solutions: tu stockes dans des tableaux les src= et tu parcours
ensuite (simple, mais un peu bourrin) soit tu fais une jolie focntion
récursive (fun mais pas sans rique et nettement plus compliqué: attention
aux conditions de sortie ...)

Si ce n'est pas clair, je pourrais sans doute faire un mini exemple.



à priori j'ai bien compris
et vu que je vais faire ca que pour ce site je vais l'analyser d'abord
et à priori ca sera toujours le même traitement
je vais tester ca bientot
et merci encore
Avatar
seb-seb
ca marche bien, j'ai tout compris ;-)
merci
Avatar
Jean-Marc
"seb-seb" a écrit dans le message de
news:OFD%
ca marche bien, j'ai tout compris ;-)
merci



Parfait :-)

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
seb-seb
Jean-Marc a écrit :
"seb-seb" a écrit dans le message de
news:OFD%

ca marche bien, j'ai tout compris ;-)
merci




Parfait :-)



encore une question en fait
un formulaire de connexion avec login ca se gère comment ?
je connais que tres tres vaguement l'html ...
Avatar
Jean-Marc
"seb-seb" a écrit dans le message de
news:
Jean-Marc a écrit :
> "seb-seb" a écrit dans le message de
> news:OFD%
>
>>ca marche bien, j'ai tout compris ;-)
>>merci
>
>
> Parfait :-)

encore une question en fait
un formulaire de connexion avec login ca se gère comment ?
je connais que tres tres vaguement l'html ...



Hmm on va friser le hors sujet ici, mais bon, je vais essayer de
faire court.

<HS>

L'idée est de mettre dans la page HTML (c'est le nom en HTML) avec
2 champs , un pour le login et un pour le mot de passe. En HTML, ça
s'écrit comme ça:
<form method="POST" action="securpage1.htm">
<input type="text" value="" name="T1">
<input type="password" value="" name="T2">
<input type="submit" value="Submit" name="B1">
</form>

Quand l'utilisateur clique sur le bouton de validation,
le navigateur appelle le serveur en faisant un POST (dans
cet exemple, mais ca peut être un GET) vers la page spécifiée
dans action="";
Les valeurs remplies par l'utilisateur dans T1 (login) et
T2 (password) sont passées dans le header HTTP;

voici ce que ça donne, sur mon serveur:

'
POST /ExecSecurPage1.htm HTTP/1.1
Referer: http://myjmnhome.dyndns.org/securpage1.htm
Accept-Language: fr-be
Content-Type: application/x-www-form-urlencoded
Host: myjmnhome.dyndns.org
Content-Length: 68
Connection: Keep-Alive
Cache-Control: no-cache

T1=mon_login_pour_rire&T2=mon_password_pour_rire&B1=Submit

'

Le serveur reçoit ceci et il sert la page demandée (securpage1.htm).
Celle ci doit d'une manière ou d'une autre savoir utiliser les
parametres T1 et T2 (login et password dans cet exemple) pour décider
quoi faire: Par exemple, faire une requête dans une base de données
pour décider si le login et password entrés sont autorisés.

Rabbit utilise un mécanisme assez original pour gérer cela, c'est expliqué
ici:
http://myjmnhome.dyndns.org/foncpagsecur.htm

</HS>

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
1 2