2010-10-18 10 views
8

Ich versuche herauszufinden, wie man einen POST in VBA machen. Idealerweise suche ich nach einem einfachen Arbeitsbeispiel, mit dem ich spielen kann. Das habe ich bisher, aber ich bin mir nicht sicher, was ich damit anfangen soll. Meistens sehen die Formdaten aus.Http Post in Vba

Function WinHTTPPostRequest(URL, formdata, Boundary) 
    Dim http 

    Set http = CreateObject("MSXML2.XMLHTTP") 

    http.Open "POST", URL, False 

    'Set Content-Type header' 
    http.setRequestHeader "Content-Type", "multipart/form-data; boundary=" + Boundary 

    'Send the form data To URL As POST binary request' 
    http.send formdata 

    'Get a result of the script which has received upload' 
    WinHTTPPostRequest = http.responseText 
End Function 

Edit:

So installierte ich Firebug, so dass ich die Objektnamen für die "Formulardaten" (siehe Code) bekommen konnte. Ich hätte gedacht, dass formdata so aussehen würde "Form1 = A & Form2 = B". Aber es funktioniert immer noch nicht. Irgendwelche Vorschläge, wie ich das besser machen sollte?

Bearbeiten: So scheint es möglicherweise versteckte Felder, die ich in meiner POST-Anfrage senden muss.

+0

Download * Fiddler *, damit Sie die HTTP-Anfragen debuggen/decodieren können. Sie könnten nur etwas Einfaches vermissen. – AMissico

Antwort

4

Um Formulardaten in dem von Ihnen vorgeschlagenen Format (d. H. Identisch mit einer GET-Anfrage) zu senden, müssen Sie den Content-Type-Header auf "application/x-www-form-urlencoded" setzen.

Wenn Sie komplexere Daten senden müssen (z. B. Dateiuploads oder andere Binärdaten), sollten Sie den Inhaltstyp möglicherweise auf "multipart/form-data" setzen. Die Details zum Formatieren des Anfragetexts sind in RFC 2388 festgelegt, aber Sie können besser eine Bibliothek finden, die das für Sie erledigt. Es kann schwierig sein, die Formatierung genau richtig zu machen, und es ist nicht notwendig, das Rad neu zu erfinden, wenn Sie es nicht als Lernerfahrung machen.

0

Download Fiddler so können Sie die HTTP-Anfragen debuggen/decodieren. Sie könnten nur etwas Einfaches vermissen.

Außerdem gibt es zahlreiche Resuls bei der Suche auf "HTTP POST VBA" in der MSDN Library. (http://social.msdn.microsoft.com/Search/en-US?query=%2BHTTP%20%2BPOST%20%2BVBA%20-stackoverflow%20-social&ac=8). (Scheint einen „Bug“ zu sein, wenn Inhalt ohne, so dass ich ausgeschlossen Stackoverflow und soziale Ergebnisse in Abfrage.)

Wie Formulardaten Senden von XMLHTTP oder ServerXMLHTTP Objekt bei http://support.microsoft.com/kb/290591 verwenden, die VBScript verwendet, ist aber leicht umgewandelt zu VBA.