Quel code VBA est requis pour exécuter un POST HTTP à partir d'une feuille de calcul Excel?Comment envoyer une requête HTTP POST à un serveur à partir d'Excel à l'aide de VBA?
Répondre
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("")
Sinon, pour un meilleur contrôle sur la requête HTTP, vous pouvez utiliser WinHttp.WinHttpRequest.5.1
en place de MSXML2.ServerXMLHTTP
.
Vous pouvez utiliser ServerXMLHTTP dans un projet VBA en ajoutant une référence à MSXML.
- Ouvrez l'éditeur VBA (généralement en éditant une macro)
- Aller à la liste des références disponibles
- Vérifiez Microsoft XML
- Cliquez sur OK.
(de Referencing MSXML within VBA Projects)
Le ServerXMLHTTP MSDN documentation a plus de détails sur toutes les propriétés et méthodes de ServerXMLHTTP.
En bref cependant, il fonctionne essentiellement comme ceci:
- Appel de méthode open pour se connecter au serveur distant
- Appel send pour envoyer la demande.
- Lire la réponse via responseXML, responseText, responseStream ou responseBody
ce lien utilise jscript, pas VBA –
Merci @JohnHenckel. J'ai apporté quelques changements pour mettre cette réponse à jour. –
Je l'ai fait avant d'utiliser la bibliothèque MSXML, puis en utilisant l'objet XMLHttpRequest. Voir http://scriptorium.serve-it.nl/view.php?sid=40
Si vous avez besoin de 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 renvoie les résultats à la même cellule qui a appelé la fonction VBA. Dans l'exemple ci-dessus, le résultat est écrit en A2.
- En ce qui concerne l'entrée ... Si vous voulez que les résultats soient actualisés lorsque vous changez certaines cellules, assurez-vous que ces cellules sont l'argument de votre fonction VBA.
- Cela ne fonctionnera pas sur Excel pour Mac 2008, qui ne possède pas VBA. Excel pour Mac 2011 a retrouvé VBA.
Pour plus de détails, vous pouvez voir mon résumé complet sur "using web services from Excel".
+1: Je n'en ai besoin que sous Windows, mais une solution multiplateforme pourrait bénéficier à quelqu'un d'autre. –
Je ne pense pas que vous pouvez réellement accéder au code html, vous ne pouvez obtenir les informations sur la page Web rendue (pas le code html réel) – user1493046
+1 pour la solution multiplateforme et +1 (si je pouvais) pour le résumé complet avec le lien gist et tout. Merci!! –
En plus du anwser de Bill the Lizard:
La plupart des backends analysent les données brutes POST. En PHP par exemple, vous aurez un tableau $ _POST dans lequel des variables individuelles dans les données de poste 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 POST brutes sur la variable "$ HTTP_RAW_POST_DATA".
J'essaye de signaler cette demande (avec des accolades) et obtenir des erreurs de compilation ... peut nous aider: "{" request ": {" carName ":" Honda "," model ":" 1A5 "}}" – fiddle
- 1. Envoyer une requête HTTP à partir du fichier VC++
- 2. Comment simuler une requête HTTP Post à partir d'une vue django sans modèle
- 3. Comment puis-je envoyer un fichier dans une requête POST?
- 4. HTTP Post/Upload à partir de Visual Basic 6
- 5. Comment envoyer une requête POST à un site web en utilisant winapi?
- 6. Envoi de données hiérarchiques à partir de javascript sur une requête POST à plat
- 7. Exemple de messages à envoyer à un serveur telnet
- 8. Envoyer un utilisateur à une page créée en fonction de sa requête POST dans Django
- 9. Obtention d'un fichier à partir d'une requête http dans java
- 10. Envoyer un fichier à l'aide de POST à partir d'un script Python
- 11. envoyer une erreur de requête HTTP (Http 503) en C#
- 12. HTTP Post Multipart/Form-données à Rails à partir de Desktop Client
- 13. Envoyer des vidéos iphone à un serveur
- 14. Rechercher un fichier à partir d'Excel VBA
- 15. Flex: Envoyer une requête HTTP POST avec des données binaires dans le corps
- 16. Comment envoyer PUT, SUPPRIMER une requête HTTP dans HttpURLConnection?
- 17. Envoyer un message à l'application .NET à partir de javascript?
- 18. Comment faire une requête Web à partir de Windows Azure
- 19. Connectez-vous à un site, puis POST à une page
- 20. Comment faire une requête HTTP POST en ASP?
- 21. Comment construire une requête webob.Request ou une instruction WSGI 'environ' à partir d'un flux d'octets de requêtes HTTP brutes?
- 22. Parler à un serveur Microsoft Geneva à partir de Java
- 23. Comment envoyer un tableau d'objet javascript à un script PHP via $ .post?
- 24. Obtention d'un fichier à partir d'un POST HTTPWebRequest entrant
- 25. Lecture de chaînes UTF8 à partir d'un serveur via http à l'aide de MIDP
- 26. Comment déterminer l'unicité des clients à partir des demandes http?
- 27. envoyer des commandes à une fenêtre/un processus démarré à partir d'un fichier de commandes
- 28. Quelle est la meilleure façon d'accéder à un port série à partir de VBA?
- 29. Comment envoyer un paquet ARP à partir d'un programme C?
- 30. Envoyer le texte à un autre serveur de messagerie
Pour un meilleur contrôle sur la requête HTTP, vous pouvez utiliser "WinHttp.WinHttpRequest.5.1" au lieu de "MSXML2.ServerXMLHTTP" –
Il convient de noter que vous pouvez également utiliser cette commande pour émettre un HTTP PUT en changeant "POST" en "PUT". Le contenu de PUT va dans la méthode .send(). Tous les en-têtes supplémentaires que vous devez définir peuvent être effectués en suivant la syntaxe utilisée dans l'exemple User-Agent. – radicand
Veuillez ne pas utiliser de parenthèses autour des paramètres si vous n'utilisez pas la valeur de retour du Sub: VBA Syntaxe n'autorise pas les parenthèses autour des paramètres Sub (ils sont cependant nécessaires pour les fonctions), donc ces parenthèses sont des parenthèses arithmétiques . En plus d'être trompeur et peu clair, cela peut éventuellement entraîner une erreur d'exécution si l'argument est un objet. Et bien que ce ne soit pas explicitement demandé, habituellement vous voudriez utiliser la réponse HTTP, que vous pourriez mentionner peut être récupérée par 'objHTTP.responseText'. – Leviathan