2012-03-30 16 views
3

Ich habe ein Problem senden POST-Anfrage mit VB6. Der folgende Code funktioniert ordnungsgemäß unter Windows7, aber unter Windows XP läuft er ohne Laufzeitfehler und sendet das Paket, aber es sieht so aus, als ob es die Post-Daten im Paket nicht anhängen würde. Mein Code ist wie folgt:Vb6 http Post Anfrage unter Windows XP

Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP") 
xmlhttp.open "POST", url, False 
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xmlhttp.setRequestHeader "Content-Length", Len(parameters) 
xmlhttp.Send parameters 

wo paramaters die Zeichenfolge "bar = foo & foo = bar" enthält

ich schon versucht, die Verweise auf Microsoft XML, v4.0 hinzuzufügen.

+0

Überspringen 'Content-Length' Header, es wird automatisch erledigt. – wqw

Antwort

2

Ich fand eine Lösung. Ich änderte den Code auf diese Weise:

Dim xmlhttp As WinHttp.WinHttpRequest 
... 

Set xmlhttp = New WinHttp.WinHttpRequest 

xmlhttp.open "POST", url, False 
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xmlhttp.setRequestHeader "Content-Length", Len(parameters) 
xmlhttp.Send parameters 

die Referenz Hinzufügen zu "Microsoft WinHTTP Services Version 5.1"

Und jetzt funktioniert es.

0

Erraten Sie hier, aber versuchen Sie diese Zeile zu ändern, indem Sie 10 (oder 100) zur Länge hinzufügen. Ändern Sie diese xmlhttp.setRequestHeader "Content-Length" , Len (Parameter) zu diesem xmlhttp.setRequestHeader "Content-Length", Len (Parameter) + 10

Ich habe nie gesagt, warum ich das tun sollte nur, dass ich 10 oder mehr zur Länge hinzufügen sollte.

0

Haben Sie versucht, Klammern so um den Sendeparameter zu setzen?

Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP") xmlhttp.open "POST", url, False  
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xmlhttp.setRequestHeader "Content-Length", Len(parameters) 
xmlhttp.Send (parameters) 

Was ich denke, passiert ist, dass, weil Sie den Parameter ByRef das ServerXMLHTTP Objekt senden wird immer verwirrt, wenn die richtige Überlastung der Send-Methode Kommissionierung. Es denkt, dass Sie einen Zeiger auf einen IStream senden, wenn Sie tatsächlich versuchen, einen BSTR zu senden. Wenn Sie den Parameter in Klammern setzen, wird der Compiler die Variable ByVal anstelle von ByRef senden, und der Compiler erkennt, dass Sie keinen Zeiger senden und die korrekte Überladung der Send-Funktion auswählen.

+0

Noch besser 'xmlhttp.Send CVar (Parameter)' vor allem, wenn Parameter Byte-Array ist. – wqw