¿Qué código de VBA se requiere para realizar un HTTP POST desde una hoja de cálculo de Excel?¿Cómo puedo enviar una solicitud HTTP POST a un servidor desde Excel usando VBA?
Respuesta
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 se puede utilizar en lugar de WinHttp.WinHttpRequest.5.1
MSXML2.ServerXMLHTTP
.
Puede usar ServerXMLHTTP en un proyecto de VBA agregando una referencia a MSXML.
- Abra el Editor de VBA (por lo general mediante la edición de una macro)
- Ir a la lista de referencias disponibles
- verificación Microsoft XML
- Haga clic en OK.
(de Referencing MSXML within VBA Projects)
El ServerXMLHTTP MSDN documentation tiene detalles completos sobre todas las propiedades y métodos de ServerXMLHTTP.
En resumen, sin embargo, es que funciona básicamente como esto:
- llamada open método para conectar con el servidor remoto
- send llamada para enviar la petición.
- Leer la respuesta a través responseXML, responseText, responseStream o responseBody
ese enlace usa jscript, no VBA –
Gracias @JohnHenckel. Hice algunos cambios para actualizar esa respuesta. –
Hice esto antes de usar la biblioteca MSXML y luego usando el objeto XMLHttpRequest. Ver http://scriptorium.serve-it.nl/view.php?sid=40
Si lo necesita para trabajar tanto en Mac y Windows, que puede utilizar 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:
- En cuanto a la salida ... No sé si es posible devuelve los resultados a la misma celda que llamó a la función VBA. En el ejemplo anterior, el resultado está escrito en A2.
- En cuanto a la entrada ... Si desea que los resultados se actualicen cuando cambie ciertas celdas, asegúrese de que esas celdas sean el argumento de su función VBA.
- Esto no funcionará en Excel para Mac 2008, que no tiene VBA. Excel para Mac 2011 recuperó VBA.
Para obtener más información, puede ver mi resumen completo sobre "using web services from Excel".
+1: solo lo necesito en Windows, pero una solución multiplataforma podría beneficiar a otra persona. –
No creo que realmente pueda acceder al código html, solo puede obtener la información en la página web procesada (no en el código html real) – user1493046
+1 para la solución multiplataforma y +1 (si puedo) para el resumen completo con el enlace esencial y todo. ¡¡Gracias!! –
Además de la anwser de Bill the Lizard:
La mayoría de los backends analizar los datos de correos primas. En PHP, por ejemplo, tendrá una matriz $ _POST en la que se almacenarán variables individuales dentro de los datos de la publicación.En este caso, usted tiene que utilizar un adicional de cabecera "Content-Type: urlencoded-x-www-formulario de solicitud /":
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 hay que leer los datos de envío primas en la variable "$ HTTP_RAW_POST_DATA".
Estoy tratando de publicar esta solicitud (con llaves) y obtener errores de compilación ... me pueden ayudar: "{" request ": {" carName ":" Honda "," model ":" 1A5 "}}" – fiddle
- 1. Solicitud HTTPS POST usando VBA para Excel
- 2. Cómo enviar una solicitud a la solicitud HTTP POST al servidor
- 3. ¿Cómo enviar una solicitud POST usando django?
- 4. ¿Cómo puedo enviar un archivo en una solicitud POST?
- 5. ¿Cómo enviar la solicitud HTTP POST con contenido gziped?
- 6. telnet enviar una solicitud HTTP
- 7. ¿Cómo enviar la solicitud POST?
- 8. ¿Cómo enviar la solicitud HTTP POST y recibir respuesta?
- 9. ¿Cómo puedo enviar una solicitud de eliminación http del navegador?
- 10. Cómo enviar una solicitud HTTP POST multipart/form-data desde C#
- 11. Enviar una solicitud DELETE HTTP
- 12. ¿Cómo enviar una solicitud HTTP en Java?
- 13. Cómo enviar una solicitud HTTP POST en Delphi usando la API de WinInet
- 14. ¿Cómo puedo crear una solicitud HTTP POST con Qt 4.6.1?
- 15. ¿Cómo enviar archivos a través de HTTP_POST con Excel usando VBA?
- 16. Cómo enviar datos json en la solicitud Http usando NSURLRequest
- 17. Enviar solicitud POST con netcat
- 18. ¿Cómo puedo ENVIAR una solicitud HTTP multiparte de Perl a Java y obtener una respuesta?
- 19. Haciendo solicitud HTTP POST
- 20. Cómo enviar un parámetro al Iframe con una solicitud HTTP POST
- 21. Cómo simular una solicitud HTTP Post desde una vista django sin una plantilla
- 22. Solicitud POST usando RCurl
- 23. ¿Cómo enviar una solicitud GET desde PHP?
- 24. ¿Cómo enviar por programación una solicitud HTTP con parámetros?
- 25. ¿Cómo realizo una POST usando X-HTTP-Method-Override con una solicitud de curl de PHP?
- 26. Enviar campos de formulario en PDF a una solicitud HTTP POST
- 27. Cómo escribir una solicitud HTTP
- 28. Realizar una publicación HTTP desde Excel y analizar resultados
- 29. ¿Cómo hacer una solicitud HTTP desde SSIS?
- 30. ¿Cómo hacer una solicitud HTTP Post/GET en Powershell?
Para un mayor control sobre la solicitud HTTP puede usar "WinHttp.WinHttpRequest.5.1" en lugar de "MSXML2.ServerXMLHTTP" –
Cabe destacar que también puede usar esto para emitir un HTTP PUT cambiando "POST" por "PUT". El contenido para PUT va en el método .send(). Cualquier encabezado adicional que necesite establecer se puede hacer también siguiendo la sintaxis utilizada en el ejemplo de User-Agent. – radicand
No utilice paréntesis en los parámetros si no utiliza el valor de retorno del Sub: La sintaxis de VBA no permite paréntesis alrededor de los parámetros de Sub (son necesarios para las funciones), por lo que estos paréntesis son en realidad paréntesis aritméticos utilizados para aclarar la precedencia del operador . Además de ser engañoso y poco claro, esto puede dar lugar a un error de tiempo de ejecución si el argumento es un objeto. Y aunque no se solicita explícitamente, por lo general, le conviene usar la respuesta HTTP, que puede mencionar que se puede recuperar con 'objHTTP.responseText'. – Leviathan