Comment puis-je envoyer une requête HTTP POST à un serveur depuis Excel en utilisant VBA?
5 réponses
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send("")
alternativement, pour un plus grand contrôle sur la requête HTTP vous pouvez utiliser WinHttp.WinHttpRequest.5.1
à la place de MSXML2.ServerXMLHTTP
.
si vous en avez besoin pour travailler sur Mac et Windows, vous pouvez utiliser QueryTables:
With ActiveSheet.QueryTables.Add(Connection:="URL;http://carbon.brighterplanet.com/flights.txt", Destination:=Range("A2"))
.PostText = "origin_airport=MSN&destination_airport=ORD"
.RefreshStyle = xlOverwriteCells
.SaveData = True
.Refresh
End With
Notes:
- en ce qui concerne la sortie... Je ne sais pas s'il est possible de retourner les résultats à la même cellule qui a appelé la fonction VBA. Dans l'exemple ci-dessus, le résultat est écrit dans A2.
- concernant l'entrée... Si vous voulez que les résultats de rafraîchissement lorsque vous changez de certaines cellules, assurez-vous que ces cellules sont l'argument à votre fonction VBA.
- cela ne fonctionnera pas sur Excel pour Mac 2008, qui n'a pas de VBA. Excel for Mac 2011 a récupéré VBA.
pour plus de détails, vous pouvez voir mon résumé complet sur" en utilisant les services web D'Excel ."
en plus de l'anwser de Bill Le Lézard :
la plupart des backends analysent les données brutes post. Dans PHP par exemple, vous aurez un tableau $_POST dans lequel des variables individuelles dans les données post seront stockées. Dans ce cas, vous devez utiliser un en-tête supplémentaire "Content-type: application/ x-www-form-urlencoded":
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("var1=value1&var2=value2&var3=value3")
sinon vous devez lire les données brutes post sur la variable "$HTTP_RAW_POST_DATA".
vous pouvez utiliser ServerXMLHTTP dans un projet VBA en ajoutant une référence à MSXML.
- ouvrir L'éditeur VBA (généralement en éditant une Macro)
- aller à la liste des références disponibles
- Check Microsoft XML
- cliquez sur OK.
(de Référencement MSXML dans les Projets VBA )
The ServerXMLHTTP La documentation MSDN contient tous les détails sur toutes les propriétés et méthodes de ServerXMLHTTP.
en bref, cependant, il fonctionne fondamentalement comme ceci:
- Appel ouvrir méthode pour se connecter au serveur distant
- Appel envoyer pour envoyer la requête.
- Read the response via responsabilexml , responsabiletext , reponsestream ou reponsebody
j'ai fait cela avant d'utiliser la bibliothèque MSXML et ensuite l'objet XMLHttpRequest. Voir http://scriptorium.serve-it.nl/view.php?sid=40