当前位置:  开发笔记 > 编程语言 > 正文

如何使用VBA从Excel向服务器发送HTTP POST请求?

如何解决《如何使用VBA从Excel向服务器发送HTTPPOST请求?》经验,为你挑选了4个好方法。

从Excel电子表格执行HTTP POST需要哪些VBA代码?



1> Bill the Liz..:
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.


为了更好地控制HTTP请求,您可以使用"WinHttp.WinHttpRequest.5.1"而不是"MSXML2.ServerXMLHTTP"
如果不使用Sub的返回值,请不要在参数周围使用括号:VBA语法不允许在Sub的参数周围使用括号(尽管函数需要它们),因此这些括号实际上是用于阐明运算符优先级的算术括号.除了误导和不清楚之外,如果参数是一个对象,这最终会导致运行时错误.虽然没有明确要求,但通常你会想要使用HTTP响应,你可以提到它可以通过`objHTTP.responseText`检索.
值得注意的是,您也可以通过将"POST"更改为"PUT"来使用它来发出HTTP PUT.PUT的内容进入.send()方法.您还需要按照User-Agent示例中使用的语法完成您需要设置的任何其他标头.
@Leviathan parens实际上做的不止于此:它们使VBA运行时*将表达式计算为值*,并且*将其传递给方法ByVal***,无论该方法的签名是否显示为"ByRef".这就是为什么将它们与没有默认成员的类型的对象变量一起使用会导致运行时错误; 并且在*具有默认成员的对象上使用它们,传递默认成员的值而不是实际对象.

2> Seamus Abshe..:

如果您需要它可以在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

笔记:

关于输出......我不知道是否可以将结果返回到调用VBA函数的同一个单元格.在上面的示例中,结果写入A2.

关于输入...如果要在更改某些单元格时刷新结果,请确保这些单元格是VBA函数的参数.

这不适用于没有VBA的Excel for Mac 2008.Excel for Mac 2011得到了VBA.

有关更多详细信息,您可以查看有关" 使用Excel中的Web服务 "的完整摘要.


+1:我只需要在Windows上使用它,但跨平台解决方案可能会让其他人受益.

3> 小智..:

除了比尔蜥蜴的anwser :

大多数后端解析原始发布数据.例如,在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"上的原始发布数据.



4> Mark Biek..:

您可以通过添加对MSXML的引用在VBA项目中使用ServerXMLHTTP.

    打开VBA编辑器(通常通过编辑宏)

    转到可用参考列表

    检查Microsoft XML

    单击确定.

(来自VBA项目中的引用MSXML)

该ServerXMLHTTP的MSDN文档有大约所有属性和ServerXMLHTTP的方法的全部细节.

简而言之,它的工作基本上是这样的:

    调用open方法连接到远程服务器

    呼叫发送以发送请求.

    通过responseXML,responseText,responseStream或responseBody读取响应

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有