OVH Cloud OVH Cloud

problème winsock....

7 réponses
Avatar
loic
Bonjour,

J'essaie d'utiliser le controle Winsock.
La connexion à priori se passe bien...

mais dès l'envoi des données, unne erreur en boucle survient 10046...

voici le code :

Private Sub B_Connexion_Click()
Me.MyWinSock.Close

Me.MyWinSock.RemoteHost = "216.239.59.99"

Me.MyWinSock.RemotePort = 80

Me.MyWinSock.Connect
End Sub



Private Sub MyWinSock_Connect()
'MsgBox "La connexion est établie!"

'on définit notre variable
Dim MyHttpRequest As String

Dim MySiteAdress As String
MySiteAdress = Me.T_Adresse_Site.Text

'Création de l'en tête.
MyHttpRequest = "GET " & MySiteAdress & "HTTP/1.0" & vbCrLf
MyHttpRequest = MyHttpRequest & "Host: " & MySiteAdress & vbCrLf
MyHttpRequest = MyHttpRequest & "Accept: */*" & vbCrLf
MyHttpRequest = MyHttpRequest & "Connection: close" & vbCrLf
MyHttpRequest = MyHttpRequest & vbCrLf

Me.MyWinSock.SendData MyHttpRequest
End Sub

Private Sub MyWinSock_Error(ByVal Number As Integer, Description As String,
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal
HelpContext As Long, CancelDisplay As Boolean)
MsgBox ("Une erreur Winsock est survenue : " & Description & vbCrLf & _
"Numero : " & Number & vbCrLf)
End Sub

Merci...

7 réponses

Avatar
dark poulpo
MyHttpRequest = "GET " & MySiteAdress & "HTTP/1.0" & vbCrLf
et
MyHttpRequest = MyHttpRequest & "Host: " & MySiteAdress & vbCrLf

ne peuvent pas etre identique, sinon le serveur risque de croire que tu veux
l'utiliser comme proxie et te deconnecter si il l'interdit

MyHttpRequest = "GET " & MySiteAdress & "HTTP/1.0" & vbCrLf <---- tu dois
avoir un resultat du type GET /images/machin.jpg HTTP/1.0+rn
en conclusion pour cette ligne t doit changer "HTTP/1.0" par " HTTP/1.0" et
te debrouiller pour recup que le chemin du repertoire

MyHttpRequest = MyHttpRequest & "Host: " & MySiteAdress & vbCrLf doit etre
du genre Host : www.truc.com+rn
donc tu dois recuperer que le host sur lequel tu te connectes, à la regueur
le Me.MyWinSock.RemoteHost
si le port est differente du protocole par defaut (80 pour http, tu peut
lidiquer aussi dans la ligne en mettant Host: www.kkk.com:port+rn

je specifie au cas ou que +rn revient à ton & vbCrLf


voila, deja essaye en corrigeant cela, apres on verra. ce qui veut pas dire
que c'est moi qui repondrait encore

--
-----
http://dark.freezee.org/
http://www.dark-team.cjb.net/
Avatar
dark poulpo
autre chose, si jai bonne mémoire, MyHttpRequest & "Connection: close" &
vbCrLf doit etre envoyé par le serveur, pas par le client
(donc à supprimer)

tu devrais jeter un oeil sur google, en tapant rfc http


--
-----
http://dark.freezee.org/
http://www.dark-team.cjb.net/
Avatar
loic
Merci de ces renseignements,
j'ai modifié le code,
et j'ai toujours une erreur qui apparait en boucle (obligé de killer VB)
maintenant 10053.
Dois je utiliser la magie noire ?


"dark poulpo" a écrit dans le message news:
425f84e0$0$19361$
MyHttpRequest = "GET " & MySiteAdress & "HTTP/1.0" & vbCrLf
et
MyHttpRequest = MyHttpRequest & "Host: " & MySiteAdress & vbCrLf

ne peuvent pas etre identique, sinon le serveur risque de croire que tu


veux
l'utiliser comme proxie et te deconnecter si il l'interdit

MyHttpRequest = "GET " & MySiteAdress & "HTTP/1.0" & vbCrLf <---- tu dois
avoir un resultat du type GET /images/machin.jpg HTTP/1.0+rn
en conclusion pour cette ligne t doit changer "HTTP/1.0" par " HTTP/1.0"


et
te debrouiller pour recup que le chemin du repertoire

MyHttpRequest = MyHttpRequest & "Host: " & MySiteAdress & vbCrLf doit etre
du genre Host : www.truc.com+rn
donc tu dois recuperer que le host sur lequel tu te connectes, à la


regueur
le Me.MyWinSock.RemoteHost
si le port est differente du protocole par defaut (80 pour http, tu peut
lidiquer aussi dans la ligne en mettant Host: www.kkk.com:port+rn

je specifie au cas ou que +rn revient à ton & vbCrLf


voila, deja essaye en corrigeant cela, apres on verra. ce qui veut pas


dire
que c'est moi qui repondrait encore

--
-----
http://dark.freezee.org/
http://www.dark-team.cjb.net/




Avatar
loic
Merci de cet exemple,
je vais essayer de me débrouiller avec,

merci pour vos réponses rapides c'est super sympa!


"LE TROLL" <le a écrit dans le message news:
#
Salut, je ne sais pas si ça peut t'avancer, mais
ci-joint en fichier, un qui fonctionne:
--------------


"loic" a écrit dans le message de
news: u$
> Bonjour,
>
> J'essaie d'utiliser le controle Winsock.
> La connexion à priori se passe bien...
>
> mais dès l'envoi des données, unne erreur en boucle
> survient 10046...
>
> voici le code :
>
> Private Sub B_Connexion_Click()
> Me.MyWinSock.Close
>
> Me.MyWinSock.RemoteHost = "216.239.59.99"
>
> Me.MyWinSock.RemotePort = 80
>
> Me.MyWinSock.Connect
> End Sub
>
>
>
> Private Sub MyWinSock_Connect()
> 'MsgBox "La connexion est établie!"
>
> 'on définit notre variable
> Dim MyHttpRequest As String
>
> Dim MySiteAdress As String
> MySiteAdress = Me.T_Adresse_Site.Text
>
> 'Création de l'en tête.
> MyHttpRequest = "GET " & MySiteAdress & "HTTP/1.0" &
> vbCrLf
> MyHttpRequest = MyHttpRequest & "Host: " & MySiteAdress
> & vbCrLf
> MyHttpRequest = MyHttpRequest & "Accept: */*" & vbCrLf
> MyHttpRequest = MyHttpRequest & "Connection: close" &
> vbCrLf
> MyHttpRequest = MyHttpRequest & vbCrLf
>
> Me.MyWinSock.SendData MyHttpRequest
> End Sub
>
> Private Sub MyWinSock_Error(ByVal Number As Integer,
> Description As String,
> ByVal Scode As Long, ByVal Source As String, ByVal
> HelpFile As String, ByVal
> HelpContext As Long, CancelDisplay As Boolean)
> MsgBox ("Une erreur Winsock est survenue : " &
> Description & vbCrLf & _
> "Numero : " & Number & vbCrLf)
> End Sub
>
> Merci...
>
>





Avatar
Pierre-yves Girault
dark poulpo a écrit :
autre chose, si jai bonne mémoire, MyHttpRequest & "Connection: close" &
vbCrLf doit etre envoyé par le serveur, pas par le client
(donc à supprimer)

tu devrais jeter un oeil sur google, en tapant rfc http





Bonjour,

Non, en fait le client peut le préciser aussi.
Ceci-dit, dans le cas présent c'est inutile car c'est le comportement
par défaut pour le HTTP/1.0.
Par contre, pour le HTTP/1.1, il faut le préciser car le comportement
par défaut du serveur est de conserver la connexion ouverte pour les
requètes suivantes (keep-alive).
Avatar
Pierre-yves Girault
Bonjour,

En tenant compte des remarques de dark poulpo (à part pour le
"connection: close") et en ajoutant un vbCrLf après la dernière ligne de
l'entête, votre code fonctionne chez moi.

Les requêtes se finissent toujours par une ligne vide, c'est comme ça
que le serveur HTTP sait que la requête est complète.
Du coup, pour la dernière ligne de l'entête il faut finir par
vbCrLf & vbCrLf



loic a écrit :
Bonjour,

J'essaie d'utiliser le controle Winsock.
La connexion à priori se passe bien...

mais dès l'envoi des données, unne erreur en boucle survient 10046...

voici le code :

Private Sub B_Connexion_Click()
Me.MyWinSock.Close

Me.MyWinSock.RemoteHost = "216.239.59.99"

Me.MyWinSock.RemotePort = 80

Me.MyWinSock.Connect
End Sub



Private Sub MyWinSock_Connect()
'MsgBox "La connexion est établie!"

'on définit notre variable
Dim MyHttpRequest As String

Dim MySiteAdress As String
MySiteAdress = Me.T_Adresse_Site.Text

'Création de l'en tête.
MyHttpRequest = "GET " & MySiteAdress & "HTTP/1.0" & vbCrLf
MyHttpRequest = MyHttpRequest & "Host: " & MySiteAdress & vbCrLf
MyHttpRequest = MyHttpRequest & "Accept: */*" & vbCrLf
MyHttpRequest = MyHttpRequest & "Connection: close" & vbCrLf
MyHttpRequest = MyHttpRequest & vbCrLf

Me.MyWinSock.SendData MyHttpRequest
End Sub

Private Sub MyWinSock_Error(ByVal Number As Integer, Description As String,
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal
HelpContext As Long, CancelDisplay As Boolean)
MsgBox ("Une erreur Winsock est survenue : " & Description & vbCrLf & _
"Numero : " & Number & vbCrLf)
End Sub

Merci...




Avatar
loic
Mon problème était un problème d'initialisation !!!

il fautr faire appel à la fonction WSAStartup de l'API

Public Declare Function WSAStartup Lib "ws2_32.dll" (ByVal wVR As Long,
lpWSAD As WSAData) As Long

et ça marche maintenant....



"loic" a écrit dans le message news:
u$
Bonjour,

J'essaie d'utiliser le controle Winsock.
La connexion à priori se passe bien...

mais dès l'envoi des données, unne erreur en boucle survient 10046...

voici le code :

Private Sub B_Connexion_Click()
Me.MyWinSock.Close

Me.MyWinSock.RemoteHost = "216.239.59.99"

Me.MyWinSock.RemotePort = 80

Me.MyWinSock.Connect
End Sub



Private Sub MyWinSock_Connect()
'MsgBox "La connexion est établie!"

'on définit notre variable
Dim MyHttpRequest As String

Dim MySiteAdress As String
MySiteAdress = Me.T_Adresse_Site.Text

'Création de l'en tête.
MyHttpRequest = "GET " & MySiteAdress & "HTTP/1.0" & vbCrLf
MyHttpRequest = MyHttpRequest & "Host: " & MySiteAdress & vbCrLf
MyHttpRequest = MyHttpRequest & "Accept: */*" & vbCrLf
MyHttpRequest = MyHttpRequest & "Connection: close" & vbCrLf
MyHttpRequest = MyHttpRequest & vbCrLf

Me.MyWinSock.SendData MyHttpRequest
End Sub

Private Sub MyWinSock_Error(ByVal Number As Integer, Description As


String,
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String,


ByVal
HelpContext As Long, CancelDisplay As Boolean)
MsgBox ("Une erreur Winsock est survenue : " & Description & vbCrLf & _
"Numero : " & Number & vbCrLf)
End Sub

Merci...