Méthode Post + WinHttpRequest + multipart/form-data

Je suis perplexe, pourquoi cela ne fonctionne pas, n'arrive pas à trouver toute les problèmes.

Voici le code.

Public Const MULTIPART_BOUNDARY = "speed"
Function getBalance() As String
Dim sEntityBody As String
Dim postBody() As Byte
Dim username As String
Dim password As String
username = CStr(frmMain.txtUser.text)
password = CStr(frmMain.txtPass.text)
sEntityBody = "--" & MULTIPART_BOUNDARY & vbCrLf
sEntityBody = sEntityBody & "Content-Disposition: form-data; name=""function""" & vbCrLf & vbCrLf & "balance" & vbCrLf
sEntityBody = sEntityBody & "--" & MULTIPART_BOUNDARY & vbCrLf
sEntityBody = sEntityBody & "Content-Disposition: form-data; name=""username""" & vbCrLf & vbCrLf & username & vbCrLf
sEntityBody = sEntityBody & "--" & MULTIPART_BOUNDARY & vbCrLf
sEntityBody = sEntityBody & "Content-Disposition: form-data; name=""password""" & vbCrLf & vbCrLf & password & vbCrLf
sEntityBody = sEntityBody & "--" & MULTIPART_BOUNDARY & "--" & vbCrLf
postBody = StrConv(sEntityBody, vbFromUnicode)
Dim xhr As Object
Set xhr = CreateObject("WinHttp.WinHttpRequest.5.1")
xhr.Option(WinHttpRequestOption_EnableRedirects) = False
If xhr Is Nothing Then Set xhr = CreateObject("WinHttp.WinHttpRequest")
If xhr Is Nothing Then Set xhr = CreateObject("MSXML2.ServerXMLHTTP")
If xhr Is Nothing Then Set xhr = CreateObject("Microsoft.XMLHTTP")
xhr.open "POST", "http://poster.example.com", False
xhr.setRequestHeader "User-Agent", "Alalala"
xhr.setRequestHeader "Content-Type", "multipart/form-data; boundary=" & MULTIPART_BOUNDARY
xhr.setRequestHeader "Content-Length", Len(sEntityBody)
xhr.send "" + sEntityBody 'postBody 'URLEncode(sEntityBody)
If xhr.Status = 200 Then
getBalance = xhr.responseText
Else
frmMain.addToChatbox "Failed at getting response from blah ErrCode:" & xhr.Status
End If
End Function

Maintenant ci-dessous fonctionne (même si c'est juste un FORMULAIRE HTML).

<form 
method="post" 
action="http://poster.example.com/" 
enctype="multipart/form-data">
<input type="hidden" name="function" value="balance">
<input type="text"   name="username" value="blah">
<input type="text"   name="password" value="blah">
<input type="submit" value="Send">
</form>

Ici est un reniflage de paquets. (Modifié le hôte etc pour exemple après)

POST /HTTP/1.1..User-Agent:
Alalala..Content-Type:
multipart/form-data;
limite=vitesse..Content-Length:
233..Accepter: /..Hôte: poster.exemple.com..Connexion:
Keep-Alive....--la vitesse..Contenu-Dispostion: form-data;
name="fonction"....solde..vitesse..Contenu-Dispostion:
form-data;
name="nom d'utilisateur"....bla..vitesse..Contenu-Dispostion:
form-data;
name="mot de passe"....bla..--vitesse--..

réponse est vide

HTTP/1.1 200 OK..Date: Thu, 07 Oct
2010 20:31:20 GMT..Serveur:
Apache..Content-Length: 0..Connexion:
proche..Content-Type: text/html;
charset=UTF-8....

P. S.> Le bouton soumettre avec la valeur Envoyer n'a pas à être envoyé donc c'est pas si quelqu'un se demande.
Ce qu'il pourrait être, et j'ai remarqué de renifler, c'est qu'il envoie l'en-tête + données post (téléchargement de données) comme un paquet et firefox/chrome envoie que 2 séparés paquets.

Merci

OriginalL'auteur SSpoke | 2010-10-07