Excel elektronik tablosundan HTTP POST gerçekleştirmek için hangi VBA kodu gerekir?
Excel elektronik tablosundan HTTP POST gerçekleştirmek için hangi VBA kodu gerekir?
Yanıtlar:
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("")
Alternatif olarak, HTTP isteği üzerinde daha fazla kontrol için kullanabileceğiniz WinHttp.WinHttpRequest.5.1
yerine MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
ya da değil. Bu nedenle bunları varsayılan üyesi olmayan bir türdeki nesne değişkenleriyle kullanmak çalışma zamanı hatalarına neden olur; ve bir nesne üzerinde bunları kullanarak yapar varsayılan üyeye sahip, gerçek nesnenin yerine varsayılan üyenin değeri geçirir.
Hem Mac hem de Windows'ta çalışması için QueryTable'ları kullanabilirsiniz:
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
Notlar:
Daha fazla ayrıntı için, " Excel'den web hizmetlerini kullanma " hakkındaki tam özetimi görebilirsiniz .
Kertenkele Bill'in patronuna ek olarak :
Arka uçların çoğu ham yazı verilerini ayrıştırır. Örneğin PHP'de $_POST
, gönderi verilerindeki bağımsız değişkenlerin saklanacağı bir diziniz olacaktır. Bu durumda ek bir başlık kullanmanız gerekir "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")
Aksi takdirde, değişkenin ham post verilerini okumalısınız "$HTTP_RAW_POST_DATA"
.
Sen kullanabilirsiniz ServerXMLHTTP
bir başvuru ekleyerek VBA projesinde MSXML
.
- VBA Düzenleyicisini açın (genellikle bir Makro düzenleyerek)
- Kullanılabilir Referanslar listesine gidin
- Microsoft XML'yi kontrol edin
- Tamam'ı tıklayın.
( VBA Projelerinde MSXML'ye Yönelikten )
ServerXMLHTTP MSDN belgelerine tüm özellikleri ve ServerXMLHTTP yöntemleri hakkında tüm detayları vardır.
Kısacası, temelde şöyle çalışır:
- Uzak sunucuya bağlanmak için açık yöntemi çağırın
- İsteği göndermek için send'i arayın .
- ResponseXML , responseText , responseStream veya response aracılığıyla yanıtı okuyun
Diğer kullanıcıların yanıtlarını tamamlamak için:
Bunun için bir "WinHttp.WinHttpRequest.5.1" nesnesi oluşturdum .
VBA'yı kullanarak Excel'den bazı verilerle bir gönderme isteği gönderin:
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")
VBA kullanarak Excel'den token kimlik doğrulaması ile bir get isteği gönderin:
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
, okuyabilirsiniz: TCRequestItem.ResponseText
yaptıktan sonraTCRequestItem.send