Attendre la fin de la recuperation du code source [Résolu]

lex1111 220 Messages postés jeudi 30 mars 2006Date d'inscription 26 octobre 2007 Dernière intervention - 6 sept. 2006 à 18:35 - Dernière réponse : lex1111 220 Messages postés jeudi 30 mars 2006Date d'inscription 26 octobre 2007 Dernière intervention
- 7 sept. 2006 à 21:15
Bonjour, j'utilise winsock pour recuperer le code source d'une page html...

---------------------------------------------------------------------------------

Private Sub Command1_Click()
Winsock1.Close 'Fermeture de winsock
Label1 = "Récupération du code src en cours..."
Code.Text = vbNullString
Winsock1.RemoteHost = TxtUrl 'Url
Winsock1.RemotePort = 80 'Port
Winsock1.Connect 'Connection
End Sub

Private Sub Winsock1_Connect()
Dim CommandeHTTP As String
Dim URLPageWeb As String
URLPageWeb = "http://" & TxtUrl & "/"
CommandeHTTP = "GET " & URLPageWeb & " HTTP/1.0" & vbCrLf & "Accept: */*" & vbCrLf & "Accept: text/html" & vbCrLf & vbCrLf
Label1 = "Envoie de la requéte..."
Winsock1.SendData CommandeHTTP
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim HTTPDonnees As String
Label1 = "reception en cours... " & Len(Code)
Winsock1.GetData HTTPDonnees, vbString
Code.Text = Code.Text & HTTPDonnees
End Sub

---------------------------------------------------------------------------------

Mais je ne sais pas comment faire pour attendre la fin de la recuperation du code source quand je suis dans ma procedure...
2 option se porte a moi :
- soit je trouve un moyen d'attendre dans ma procedure la fin de la recuperation du code source
- soit je trouve un moyen de faire une fonction avec ce mon code winsock que j'apellerai dans ma procedure

Le problème c'est que je ne sais pas comment faire. Pouvez vous m'aider ?
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 7 sept. 2006 à 20:27
3
Merci
une idée....

http://www.vbfrance.com/codes/RECUPERER-PAGE-WEB-HTML-AVEC-WINSOCK_86.aspx
'
Option Explicit 
'
Private Sub Command1_Click() 
    Winsock1.Close 
    Winsock1.RemoteHost =  "www.vbfrance.com" 
    Winsock1.RemotePort = 80 
    Winsock1.Connect 
End Sub 
'
Private Sub Form_Unload(Cancel As Integer) 
    Winsock1.Close 
End Sub 
'
Private Sub Winsock1_Connect() 
    Dim CommandeHTTP As String 
    Dim URLPageWeb As String 

    URLPageWeb = "http://www.vbfrance.com/
    CommandeHTTP = "GET " & URLPageWeb & " HTTP/1.0" & vbCrLf & "Accept: */*" & vbCrLf & "Accept: text/html" & vbCrLf & vbCrLf 
    Winsock1.SendData CommandeHTTP 
End Sub 
'
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 
    Dim HTTPDonnees As String 
    Winsock1.GetData HTTPDonnees, vbString 
    RTB.Text = RTB.Text & HTTPDonnees 
End Sub 
'
Private Sub Winsock1_Close() 
    Winsock1.Close 
    DoEvents 
    Call SuiteDuCode 
End Sub 
'
Private Sub SuiteDuCode() 
    MsgBox "là ta suite.." 
    '   blabla
End Sub

<small> Coloration
syntaxique automatique [AFCK] </small>
       

++
PCPT   [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de PCPT
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 6 sept. 2006 à 19:58
0
Merci
Salut
Le marqueur de fin est un double vbCrLf.
Suffit donc d'attendre que ton HTTPDonnees contienne cette chaine :
If Instr(HTTPDonnees, vbCrLf & vbCrLf) > 0 Then MsgBox "Terminado !"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Commenter la réponse de cs_Jack
lex1111 220 Messages postés jeudi 30 mars 2006Date d'inscription 26 octobre 2007 Dernière intervention - 7 sept. 2006 à 13:32
0
Merci
Merci...Je vais donc essayer ça :

While Instr(HTTPDonnees, vbCrLf & vbCrLf) = 0
do events
wend

j'espère que ça marchera...
Commenter la réponse de lex1111
lex1111 220 Messages postés jeudi 30 mars 2006Date d'inscription 26 octobre 2007 Dernière intervention - 7 sept. 2006 à 13:40
0
Merci
ça ne fonctionne pas... une autre idée ?
Commenter la réponse de lex1111
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 7 sept. 2006 à 15:33
0
Merci
salut,
c'est cette boucle qui ve te gêner à recevoir le reste justement.....
enfin... à supposer que tu l'aies mise au data_arrival

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Commenter la réponse de PCPT
lex1111 220 Messages postés jeudi 30 mars 2006Date d'inscription 26 octobre 2007 Dernière intervention - 7 sept. 2006 à 16:23
0
Merci
non ce que j'ai fait c'est ça :

---------------------------------------------------------------------------------

Private Sub Command1_Click()
Winsock1.Close 'Fermeture de winsock
Label1 = "Récupération du code src en cours..."
Code.Text = vbNullString
Winsock1.RemoteHost = TxtUrl 'Url
Winsock1.RemotePort = 80 'Port
Winsock1.Connect 'Connection

While Instr(HTTPDonnees, vbCrLf & vbCrLf) = 0
do events
wend

msgbox "truc"

End Sub

Private Sub Winsock1_Connect()
Dim CommandeHTTP As String
Dim URLPageWeb As String
URLPageWeb = "http://" & TxtUrl & "/"
CommandeHTTP
= "GET " & URLPageWeb & " HTTP/1.0" & vbCrLf & "Accept:
*/*" & vbCrLf & "Accept: text/html" & vbCrLf & vbCrLf
Label1 = "Envoie de la requéte..."
Winsock1.SendData CommandeHTTP
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim HTTPDonnees As String
Label1 = "reception en cours... " & Len(Code)
Winsock1.GetData HTTPDonnees, vbString
Code.Text = Code.Text & HTTPDonnees
End Sub

---------------------------------------------------------------------------------

soit "truc" s'affiche avant que la recuperaion des données soit terminé, soit la recuperation des données ne se fait pas....
Commenter la réponse de lex1111
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 7 sept. 2006 à 19:40
0
Merci
Re
Tu n'as pas dû beaucoup reflechir :
Comment veux-tu que ton programme connaisse le contenu de HTTPDonnees dans ta Sub Command1_Click ?
Cette variable n'est déclarée que dans DataArrival !
Il faut donc faire le test sur Code.Text, et pas HTTPDonnees

De plus, je ne pense pas que VB accepte ta syntaxe de "Do Events" puisque la commande réelle est DoEvents (sans espace)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
lex1111 220 Messages postés jeudi 30 mars 2006Date d'inscription 26 octobre 2007 Dernière intervention - 7 sept. 2006 à 19:46
0
Merci
J'avais déclaré la variable en public et j'avais aussi mis doevents mais comme ça ne marchait pas je n'ai pas enregistrer le projet et j'ai donc du refaire le code en posant ma question (ce qui explique les erreures)

Sinon d'autres idées pour mon problème ?
Commenter la réponse de lex1111
lex1111 220 Messages postés jeudi 30 mars 2006Date d'inscription 26 octobre 2007 Dernière intervention - 7 sept. 2006 à 21:15
0
Merci
youpi ça marche merci bcp... voila le code que j'utilise finalement

en fait il me manquait le winsock_close...je ne savais pas que avec ça on pouvait connaitre la fin de la recuperation du code...

------------------------------------------------------------------------------------------------
Public go As Boolean

Private Sub Command1_Click()

Code
Code
Code
Code

Winsock1.Close 'Fermeture de winsock
Label1 = "Récupération du code src en cours..."
Code.Text = vbNullString
Winsock1.RemoteHost = TxtUrl 'Url
Winsock1.RemotePort = 80 'Port
Winsock1.Connect 'Connection

go = False

Do
DoEvents
Loop Until go = True

Code
Code
Code
Code

End Sub

Private Sub Winsock1_Close()
Winsock1.Close
go = True
End Sub

Private Sub Winsock1_Connect()
Dim CommandeHTTP As String
Dim URLPageWeb As String
URLPageWeb = "http://" & TxtUrl & "/"
CommandeHTTP = "GET " & URLPageWeb & " HTTP/1.0" & vbCrLf & "Accept: */*" & vbCrLf & "Accept: text/html" & vbCrLf & vbCrLf
Label1 = "Envoie de la requéte..."
Winsock1.SendData CommandeHTTP
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim HTTPDonnees As String
Label1 = "reception en cours... " & Len(Code)
Winsock1.GetData HTTPDonnees, vbString
Code.Text = Code.Text & HTTPDonnees
End Sub
Commenter la réponse de lex1111

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.