Hvordan kan jeg sende en HTTP POST-forespørsel til en server fra Excel ved hjelp av VBA?

stemmer
119

Hva VBA-kode er nødvendig for å utføre en HTTP POST fra et Excel-regneark?

Publisert på 01/10/2008 klokken 14:59
kilden bruker
På andre språk...                            


6 svar

stemmer
5

Du kan bruke ServerXMLHTTP i en VBA-prosjekt ved å legge til en referanse til MSXML.

  1. Åpne VBA Editor (vanligvis ved å redigere en makro)
  2. Gå til listen over tilgjengelige referanser
  3. Sjekk Microsoft XML
  4. Klikk på OK.

(fra Referanse MSXML innenfor VBA-prosjekter )

Den ServerXMLHTTP MSDN dokumentasjon har full informasjon om alle egenskapene og metodene for ServerXMLHTTP.

Kort sagt skjønt, det fungerer i utgangspunktet som dette:

  1. Ring åpen metode for å koble til den eksterne serveren
  2. Ring send for å sende forespørselen.
  3. Les svaret via responseXML , response , responseStream eller responseBody
Svarte 01/10/2008 kl. 15:01
kilden bruker

stemmer
0

Jeg gjorde dette før du bruker MSXML biblioteket og deretter bruke XMLHttpRequest objektet. se http://scriptorium.serve-it.nl/view.php?sid=40

Svarte 01/10/2008 kl. 15:03
kilden bruker

stemmer
125

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

Alternativt, for større kontroll over HTTP-forespørsel kan du bruke WinHttp.WinHttpRequest.5.1i stedet for MSXML2.ServerXMLHTTP.

Svarte 01/10/2008 kl. 15:03
kilden bruker

stemmer
49

Hvis du trenger det til å fungere på både Mac og Windows, kan du bruke 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

Merknader:

  • Angå utgang ... Jeg vet ikke om det er mulig å returnere resultatene til den samme cellen som kalles VBA-funksjonen. I eksempelet ovenfor, blir resultatet skrives inn i A2.
  • Angående innspill ... Hvis du ønsker at resultatene skal oppdatere når du endrer visse celler, sørg for at disse cellene er argumentet til VBA-funksjonen.
  • Dette vil ikke fungere på Excel for Mac 2008, som ikke har VBA. Excel for Mac 2011 fikk VBA tilbake.

For mer informasjon, kan du se mitt fulle oppsummering om " bruk av web services fra Excel ."

Svarte 06/01/2011 kl. 15:07
kilden bruker

stemmer
36

I tillegg til anwser av Bill Lizard :

De fleste av backends analysere rå legg data. I PHP for eksempel, vil du ha en rekke $ _POST hvor de enkelte variablene i innlegget data vil bli lagret. I dette tilfellet må du bruke en ekstra header "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")

Ellers må du lese rå legg data på variabelen "$ HTTP_RAW_POST_DATA".

Svarte 10/07/2013 kl. 10:03
kilden bruker

stemmer
0

For å fullføre responsen fra andre brukere:

For dette har jeg laget en "WinHttp.WinHttpRequest.5.1" objekt.

Send en post forespørsel med noen data fra Excel ved hjelp av VBA:

Dim LoginRequest As Object
Set LoginRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
LoginRequest.Open "POST", "http://...", False
LoginRequest.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
LoginRequest.send ("key1=value1&key2=value2")

Send en GET-forespørsel med token godkjenning fra Excel ved hjelp av VBA:

Dim TCRequestItem As Object
Set TCRequestItem = CreateObject("WinHttp.WinHttpRequest.5.1")
TCRequestItem.Open "GET", "http://...", False
TCRequestItem.setRequestHeader "Content-Type", "application/xml"
TCRequestItem.setRequestHeader "Accept", "application/xml"
TCRequestItem.setRequestHeader "Authorization", "Bearer " & token
TCRequestItem.send
Svarte 11/12/2019 kl. 12:30
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more