Quel code VBA est requis pour effectuer un HTTP POST à partir d'une feuille de calcul Excel?
Quel code VBA est requis pour effectuer un HTTP POST à partir d'une feuille de calcul Excel?
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("")
Sinon, pour un meilleur contrôle sur la requête HTTP, vous pouvez utiliser WinHttp.WinHttpRequest.5.1
à la place de MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
ou non. C'est pourquoi leur utilisation avec des variables d'objet d'un type qui n'a pas de membre par défaut provoque des erreurs d'exécution; et de les utiliser sur un objet qui fait un membre par défaut, la valeur passe de ce membre par défaut au lieu de l'objet réel.
Si vous en avez besoin pour fonctionner à la fois 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
Remarques:
Pour plus de détails, vous pouvez consulter mon résumé complet sur «l' utilisation des services Web d'Excel ».
En plus de la réponse de Bill the Lizard :
La plupart des backends analysent les données de publication brutes. En PHP par exemple, vous aurez un tableau $_POST
dans lequel des variables individuelles dans les données de publication 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 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 éditant une macro)
- Aller à la liste des références disponibles
- Vérifiez Microsoft XML
- Cliquez sur OK.
(à partir du référencement MSXML dans les projets VBA )
La documentation MSDN ServerXMLHTTP contient des 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 au serveur distant
- Appelez envoyer pour envoyer la demande.
- Lire la réponse via responseXML , responseText , responseStream ou responseBody
Pour compléter la réponse des autres utilisateurs:
Pour cela, j'ai créé un objet "WinHttp.WinHttpRequest.5.1" .
Envoyez une demande de publication avec des données d'Excel en utilisant VBA:
Dim LoginRequest As Object
Set LoginRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
LoginRequest.Open "POST", "http://...", False
LoginRequest.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
LoginRequest.send ("key1=value1&key2=value2")
Envoyez une demande d'obtention avec l'authentification par jeton d'Excel à l'aide de VBA:
Dim TCRequestItem As Object
Set TCRequestItem = CreateObject("WinHttp.WinHttpRequest.5.1")
TCRequestItem.Open "GET", "http://...", False
TCRequestItem.setRequestHeader "Content-Type", "application/xml"
TCRequestItem.setRequestHeader "Accept", "application/xml"
TCRequestItem.setRequestHeader "Authorization", "Bearer " & token
TCRequestItem.send
TCRequestItem Object
, vous pouvez la lire comme: TCRequestItem.ResponseText
après l'avoir faitTCRequestItem.send