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.1yerine MSXML2.ServerXMLHTTP.
objHTTP.responseText.
ByRefya 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 ServerXMLHTTPbir 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.ResponseTextyaptıktan sonraTCRequestItem.send