Saltar al contenido

¿Cómo puedo enviar una solicitud HTTP POST a un servidor desde Excel usando VBA?

Mantén la atención ya que en este tutorial hallarás el resultado que buscas.

Solución:

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, puede usar WinHttp.WinHttpRequest.5.1 en lugar de MSXML2.ServerXMLHTTP.

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:

  • Con respecto a la salida… No sé si es posible devolver los resultados a la misma celda que llamó a la función VBA. En el ejemplo anterior, el resultado se escribe en A2.
  • Con respecto a la entrada… Si desea que los resultados se actualicen cuando cambia 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 detalles, puede ver mi resumen completo sobre “usar servicios web desde Excel”.

Además de la respuesta de Bill the Lizard:

La mayoría de los backends analizan los datos de publicación sin procesar. En PHP, por ejemplo, tendrá un array $_POST en el que se almacenarán las variables individuales dentro de los datos de la 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".

Recuerda recomendar este tutorial si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *