Comment puis-je envoyer une demande HTTP POST à ??un serveur à partir d'Excel à l'aide de VBA?
Question
Quel code VBA est requis pour effectuer une opération HTTP POST à ??partir d'une feuille de calcul Excel?
La solution
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("")
Vous pouvez également utiliser WinHttp.WinHttpRequest.5.1
à la place de MSXML2.ServerXMLHTTP
.
Autres conseils
Si vous en avez besoin pour fonctionner à la fois sur Mac et Windows, vous pouvez utiliser des tables de requête:
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 renvoyer les résultats dans la même cellule que la fonction VBA. Dans l'exemple ci-dessus, le résultat est écrit en A2.
- En ce qui concerne l'entrée ... Si vous souhaitez que les résultats soient actualisés lorsque vous modifiez certaines cellules, assurez-vous que ces cellules constituent l'argument de votre fonction VBA.
- Cela ne fonctionnera pas sur Excel pour Mac 2008, qui ne dispose pas de VBA. Excel pour Mac 2011 a récupéré VBA.
Pour plus de détails, vous pouvez consulter mon résumé complet sur & utilisation de services Web d'Excel . "
En plus de la réponse de Facturez le lézard :
La plupart des serveurs analysent les données de publication brutes. En PHP par exemple, vous aurez un tableau $ _POST dans lequel les variables individuelles dans les données de publication seront stockées. Dans ce cas, vous devez utiliser un en-tête supplémentaire "Type de contenu: 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 de publication brutes sur la variable "$ HTTP_RAW_POST_DATA".
Vous pouvez utiliser ServerXMLHTTP dans un projet VBA en ajoutant une référence à MSXML.
- Ouvrez l'éditeur VBA (généralement en modifiant une macro)
- Accédez à la liste des références disponibles
- Vérifier Microsoft XML
- Cliquez sur OK.
(from Référencement de MSXML dans des projets VBA )
La documentation MSDN sur ServerXMLHTTP a Détails complets sur toutes les propriétés et méthodes de ServerXMLHTTP.
En bref, cela fonctionne essentiellement comme ceci:
- Appelez la méthode ouverte pour vous connecter sur le serveur distant
- Appelez envoyer pour envoyer le demande.
- Lisez la réponse via responseXML . , responseText , responseStream ou responseBody
Je l’ai fait avant d’utiliser la bibliothèque MSXML, puis l’objet XMLHttpRequest. Voir http://scriptorium.serve-it.nl/view.php?sid = 40