Comment puis-je envoyer une requête HTTP POST à un serveur depuis Excel en utilisant VBA?

quel code VBA est requis pour exécuter un message HTTP à partir D'une feuille de calcul Excel?

121
demandé sur Community 2008-10-01 20:59:14

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 .

126
répondu Bill the Lizard 2017-01-09 15:49:54

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 ."

49
répondu Seamus Abshere 2011-01-06 17:07:15

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".

36
répondu thiscode 2017-05-23 12:26:32

vous pouvez utiliser ServerXMLHTTP dans un projet VBA en ajoutant une référence à MSXML.

  1. ouvrir L'éditeur VBA (généralement en éditant une Macro)
  2. aller à la liste des références disponibles
  3. Check Microsoft XML
  4. 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:

  1. Appel ouvrir méthode pour se connecter au serveur distant
  2. Appel envoyer pour envoyer la requête.
  3. Read the response via responsabilexml , responsabiletext , reponsestream ou reponsebody
5
répondu Mark Biek 2016-08-19 11:39:31

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

0
répondu Sijin 2008-10-01 17:03:18