Kode VBA apa yang diperlukan untuk melakukan POST HTTP dari spreadsheet Excel?
Kode VBA apa yang diperlukan untuk melakukan POST HTTP dari spreadsheet Excel?
Jawaban:
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("")
Atau, untuk kontrol yang lebih besar atas permintaan HTTP yang dapat Anda gunakan WinHttp.WinHttpRequest.5.1
sebagai ganti MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
atau tidak. Itu sebabnya menggunakannya dengan variabel objek tipe yang tidak memiliki anggota default menyebabkan kesalahan run-time; dan menggunakannya pada objek yang memang memiliki anggota default, melewati nilai anggota default itu bukan objek yang sebenarnya.
Jika Anda membutuhkannya untuk bekerja di Mac dan Windows, Anda dapat menggunakan 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
Catatan:
Untuk detail lebih lanjut, Anda dapat melihat ringkasan lengkap saya tentang " menggunakan layanan web dari Excel ."
Selain anwser dari Bill the Lizard :
Sebagian besar backends mengurai data posting mentah. Dalam PHP misalnya, Anda akan memiliki array $_POST
di mana masing-masing variabel dalam data posting akan disimpan. Dalam hal ini Anda harus menggunakan tajuk tambahan "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")
Kalau tidak, Anda harus membaca data posting mentah pada variabel "$HTTP_RAW_POST_DATA"
.
Anda dapat menggunakan ServerXMLHTTP
dalam proyek VBA dengan menambahkan referensi ke MSXML
.
- Buka Editor VBA (biasanya dengan mengedit Makro)
- Buka daftar Referensi yang Tersedia
- Periksa Microsoft XML
- Klik OK.
(dari Referensi MSXML dalam Proyek VBA )
The dokumentasi ServerXMLHTTP MSDN memiliki rincian lengkap tentang semua properti dan metode dari ServerXMLHTTP.
Singkatnya, pada dasarnya kerjanya seperti ini:
- Panggil metode terbuka untuk terhubung ke server jarak jauh
- Panggilan kirim untuk mengirim permintaan.
- Baca responsnya melalui responseXML , responseText , responseStream , atau responseBody
Untuk melengkapi respons pengguna lain:
Untuk ini saya telah membuat objek "WinHttp.WinHttpRequest.5.1" .
Kirim permintaan pos dengan beberapa data dari Excel menggunakan 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")
Kirim permintaan dapatkan dengan otentikasi token dari Excel menggunakan 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
TCRequestItem Object
, Anda dapat membacanya seperti: TCRequestItem.ResponseText
setelah melakukanTCRequestItem.send