¿Qué código VBA se requiere para realizar una POST HTTP desde una hoja de cálculo de Excel?
135
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:
Notas:
Para obtener más detalles, puede ver mi resumen completo sobre "el uso de servicios web desde Excel ".
fuente
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"
:De lo contrario, debe leer los datos de publicación sin procesar en la variable
"$HTTP_RAW_POST_DATA"
.fuente
Puede usar
ServerXMLHTTP
en un proyecto VBA agregando una referencia aMSXML
.(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í:
fuente
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:
Envíe una solicitud de obtención con autenticación de token desde Excel usando VBA:
fuente
TCRequestItem Object
, puedes leerlo como:TCRequestItem.ResponseText
después de hacerloTCRequestItem.send
Hice esto antes de usar la biblioteca MSXML y luego usar el objeto XMLHttpRequest, mira aquí .
fuente