Question

Je suis perplexe pourquoi cela ne semble pas le travail ne peut trouver aucun problème.

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, ce ci-dessous fonctionne (bien que ce soit 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>

Voici un sniff de paquets. (Altered l'hôte à l'exemple etc après)

  

POST / HTTP / 1.1..User-Agent:   Alalala..Content-Type:   multipart / form-data;   boundary = speed..Content-Longueur:   233..Accept: / .. Hôte: poster.example.com..Connection:   Keep-Alive ....-- speed..Content-dispostion: form-data;   name = "fonction" .... équilibre ..-- speed..Content-dispostion:   Données de formulaire;   name = "nom d'utilisateur" .... bla-..-- speed..Content dispostion:   Données de formulaire;   name = "mot de passe" .... bla ..-- vitesse - ..

réponse est vide

  

HTTP / 1.1 200 OK..Date: Jeu 7 octobre   2010 20:31:20 GMT..Server:   Apache..Content-Longueur: 0..Connection:   close..Content-Type: text / html;   charset = UTF-8 ....

post-scriptum> Le bouton soumettre à la valeur Envoyer ne doit pas être envoyé donc ce pas si quelqu'un se demande. Qu'est-ce qu'il pourrait être et je l'ai remarqué de renifler est qu'il envoie l'en-tête + données post (données de téléchargement) comme un paquet et firefox / chrome envoie comme 2 paquets séparés.

Merci

Était-ce utile?

La solution

Mis orthographié Content-Disposition doit être Content-Disposition yup grâce à ce que j'ai souffert pendant 6? peut-être 7 heures.

résolu enfin

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top