从Excel电子表格执行HTTP POST需要什么VBA代码?
从Excel电子表格执行HTTP POST需要什么VBA代码?
Answers:
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("")
另外,为了更好地控制HTTP请求,您可以WinHttp.WinHttpRequest.5.1
代替使用MSXML2.ServerXMLHTTP
。
objHTTP.responseText
。
ByRef
。这就是为什么将它们与没有默认成员类型的对象变量一起使用会导致运行时错误的原因。并在具有默认成员的对象上使用它们,并传递该默认成员的值而不是实际对象。
如果需要它在Mac和Windows上均可使用,则可以使用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
笔记:
有关更多详细信息,您可以查看我的有关“ 使用Excel中的Web服务 ”的完整摘要。
除了比尔的蜥蜴 ws :
大多数后端都会解析原始的发布数据。例如,在PHP中,将有一个数组$_POST
,其中将存储帖子数据中的各个变量。在这种情况下,您必须使用其他标题"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")
否则,您必须读取变量上的原始发布数据"$HTTP_RAW_POST_DATA"
。
您可以ServerXMLHTTP
在VBA项目中使用对的引用MSXML
。
- 打开VBA编辑器(通常通过编辑宏)
- 转到可用参考列表
- 检查Microsoft XML
- 单击确定。
(来自在VBA项目中引用MSXML)
该ServerXMLHTTP的MSDN文档有大约所有属性和ServerXMLHTTP的方法的全部细节。
简而言之,它基本上是这样的:
- 调用打开方法以连接到远程服务器
- 致电发送以发送请求。
- 通过responseXML,responseText,responseStream或responseBody读取响应
要完成其他用户的响应:
为此,我创建了一个“ WinHttp.WinHttpRequest.5.1”对象。
使用VBA从Excel发送带有一些数据的发布请求:
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从Excel发送带有令牌身份验证的get请求:
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
,您可以像TCRequestItem.ResponseText
这样阅读:做完之后TCRequestItem.send