¿Qué código VBA se requiere para realizar una POST HTTP desde una hoja de cálculo de Excel?
¿Qué código VBA se requiere para realizar una POST HTTP desde una hoja de cálculo de Excel?
Respuestas:
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("")
Alternativamente, para un mayor control sobre la solicitud HTTP que puede usar WinHttp.WinHttpRequest.5.1
en lugar de MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
o no. Es por eso que usarlos con variables de objeto de un tipo que no tiene un miembro predeterminado causa errores en tiempo de ejecución; y utilizarlos en un objeto que lo hace tener un miembro predeterminado, pasa el valor de ese miembro predeterminado en lugar del objeto real.
Si necesita que funcione tanto en Mac como en Windows, puede usar 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
Notas:
Para obtener más detalles, puede ver mi resumen completo sobre "el uso de servicios web desde Excel ".
Además de la respuesta de Bill el Lagarto :
La mayoría de los backends analizan los datos de publicación sin procesar. En PHP, por ejemplo, tendrá una matriz $_POST
en la que se almacenarán variables individuales dentro de los datos de publicación. En este caso, debe usar un encabezado adicional "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")
De lo contrario, debe leer los datos de publicación sin procesar en la variable "$HTTP_RAW_POST_DATA"
.
Puede usar ServerXMLHTTP
en un proyecto VBA agregando una referencia a MSXML
.
- Abra el Editor de VBA (generalmente editando una Macro)
- Ir a la lista de referencias disponibles
- Verificar Microsoft XML
- Haga clic en Aceptar.
(de Referencia a MSXML dentro de proyectos VBA )
La documentación de ServerXMLHTTP MSDN tiene detalles completos sobre todas las propiedades y métodos de ServerXMLHTTP.
En resumen, funciona básicamente así:
- Llamada abierta método para conectarse al servidor remoto
- Llamada enviar para enviar la solicitud.
- Lea la respuesta a través de responseXML , responseText , responseStream o responseBody
Para completar la respuesta de los otros usuarios:
Para esto, he creado un objeto "WinHttp.WinHttpRequest.5.1" .
Envíe una solicitud de publicación con algunos datos de Excel usando 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")
Envíe una solicitud de obtención con autenticación de token desde Excel usando 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
, puedes leerlo como: TCRequestItem.ResponseText
después de hacerloTCRequestItem.send