Pregunta

¿Qué código VBA se requiere para realizar una POST HTTP desde una hoja de cálculo de Excel?

¿Fue útil?

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("")

Como alternativa, para un mayor control sobre la solicitud HTTP, puede usar WinHttp.WinHttpRequest.5.1 en lugar de MSXML2.ServerXMLHTTP .

Otros consejos

Si lo necesitas para trabajar tanto en Mac como en Windows, puedes 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:

  • 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.
  • Respecto 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 detalles, puede ver mi resumen completo sobre " usando servicios web de 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á una matriz $ _POST en la que se almacenarán las variables individuales dentro de los datos de la publicación. En este caso, debe utilizar un encabezado adicional " Tipo de contenido: 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 de VBA agregando una referencia a MSXML.

  1. Abra el Editor de VBA (generalmente editando una macro)
  2. Vaya a la lista de referencias disponibles
  3. Comprobar Microsoft XML
  4. Haz clic en Aceptar.

(de Cómo hacer referencia al MSXML en proyectos de VBA )

La ServerXMLHTTP MSDN documentación tiene Detalles completos sobre todas las propiedades y métodos de ServerXMLHTTP.

En resumen, funciona básicamente así:

  1. Llame al método open para conectarse al servidor remoto
  2. Llame a envíe para enviar el solicitud.
  3. Lea la respuesta a través de responseXML , responseText , responseStream o responseBody

Hice esto antes de usar la biblioteca MSXML y luego usar el objeto XMLHttpRequest. Consulte http://scriptorium.serve-it.nl/view.php?sid = 40

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top