Attendre la fin de la recuperation du code source

Résolu
lex1111 Messages postés 220 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 26 octobre 2007 - 6 sept. 2006 à 18:35
lex1111 Messages postés 220 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 26 octobre 2007 - 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 ?

9 réponses

PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
7 sept. 2006 à 20:27
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
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
6 sept. 2006 à 19:58
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)
0
lex1111 Messages postés 220 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 26 octobre 2007 1
7 sept. 2006 à 13:32
Merci...Je vais donc essayer ça :

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

j'espère que ça marchera...
0
lex1111 Messages postés 220 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 26 octobre 2007 1
7 sept. 2006 à 13:40
ça ne fonctionne pas... une autre idée ?
0

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

Posez votre question
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
7 sept. 2006 à 15:33
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
0
lex1111 Messages postés 220 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 26 octobre 2007 1
7 sept. 2006 à 16:23
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....
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
7 sept. 2006 à 19:40
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)
0
lex1111 Messages postés 220 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 26 octobre 2007 1
7 sept. 2006 à 19:46
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 ?
0
lex1111 Messages postés 220 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 26 octobre 2007 1
7 sept. 2006 à 21:15
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
0
Rejoignez-nous