Domanda

Quale codice VBA è necessario per eseguire un POST HTTP da un foglio di calcolo Excel?

È stato utile?

Soluzione

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

In alternativa, per un maggiore controllo sulla richiesta HTTP è possibile utilizzare WinHttp.WinHttpRequest.5.1 al posto di MSXML2.ServerXMLHTTP .

Altri suggerimenti

Se ne hai bisogno per funzionare sia su Mac che su Windows, puoi utilizzare 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

Note:

  • Per quanto riguarda l'output ... Non so se è possibile restituire i risultati alla stessa cella che ha chiamato la funzione VBA. Nell'esempio sopra, il risultato è scritto in A2.
  • Riguardo all'input ... Se vuoi che i risultati si aggiornino quando cambi determinate celle, assicurati che quelle celle siano l'argomento della tua funzione VBA.
  • Questo non funzionerà su Excel per Mac 2008, che non ha VBA. Excel per Mac 2011 ha restituito VBA.

Per maggiori dettagli, puoi vedere il mio sommario completo su " utilizzando servizi web da Excel . "

Oltre alla risposta di Bill the Lizard :

La maggior parte dei backend analizza i dati grezzi dei post. In PHP, ad esempio, avrai un array $ _POST in cui verranno memorizzate le singole variabili all'interno dei dati di post. In questo caso devi utilizzare un'intestazione aggiuntiva " Tipo di contenuto: 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")

Altrimenti devi leggere i dati grezzi dei post sulla variabile " $ HTTP_RAW_POST_DATA " ;.

È possibile utilizzare ServerXMLHTTP in un progetto VBA aggiungendo un riferimento a MSXML.

  1. Apri l'editor VBA (di solito modificando una macro)
  2. Vai all'elenco dei riferimenti disponibili
  3. Controlla Microsoft XML
  4. Fai clic su OK.

(da Riferimenti a MSXML all'interno di progetti VBA )

La Documentazione MSDN ServerXMLHTTP ha tutti i dettagli su tutte le proprietà e i metodi di ServerXMLHTTP.

In breve, funziona sostanzialmente in questo modo:

  1. Chiama il metodo open per connetterti al server remoto
  2. Chiama invia per inviare il richiesta.
  3. Leggi la risposta tramite responseXML , responseText , responseStream o responseBody

L'ho fatto prima di usare la libreria MSXML e poi usare l'oggetto XMLHttpRequest. Vedi http://scriptorium.serve-it.nl/view.php?sid = 40

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top