【问题标题】:VBA MSXML2 Open member POSTVBA MSXML2 打开成员 POST
【发布时间】:2014-03-07 15:14:31
【问题描述】:

在此代码片段示例中...

Dim pullSite As String
Dim pullXMLHTTP As MSXML2.XMLHTTP
Set pullXMLHTTP = New MSXML2.XMLHTTP

pullSite = "http://www.ThisIsASite.com/Documents/whatever........xml"

pullXMLHTTP.Open "POST", strXMLSite, False

...我在代码中遇到了 Open 这个词,我认为它是一种方法,因为它不等于任何东西(在左下角的 OB 屏幕中,一旦选择它就说它是一个 Sub,但我休息一下OB 将方法命名为 Sub 和 Function 的案例 - 我想它想说这是一个类浏览器,所以我们将方法声明为 Sub 或 Function 就像我们“自定义”在类模块中制作它们时一样,但我不确定)。如果我转到 MSXML2 库中的对象浏览器,我会在 XMLHTTP 中找到作为成员列出的 Open。

如果我打 F1 VBA 的帮助有 3 个选择。第一选择(VBA 库)告诉我这是显然不是的开放语句。

第二个选择(Excel 库)有一个 RecentFile。打开方法没有参数,所以它也不买那个。

第三个选项(Office Library)给了我开发者参考主菜单。

所以 F1 VBA 的自动帮助对 MSXML2 库没有任何帮助。但是,如果我从 MSXML2.XMLHTTP 库中选择它声明的开放成员,则在 OB 的左下角

Sub open(bstrMethod As String, bstrUrl As String, [varAsync], [bstrUser], [bstrPassword])
    Member of MSXML2.XMLHTTP
    Open HTTP connection

所以我的问题是双重的

  • 是否有详细记录 MSXML2 库成员的可靠帮助/或将其添加到 VBA 的自动帮助中的方法? (顺便说一句,微软的 MSXML 开发中心 MSXLM 庞大而模糊。我也相信它指向经验丰富的影射......

  • 为什么我在使用 MSXML2.HTTP Open 成员的相关示例中看到,第一个字符串参数 always 填充了单词“POST”大写字母?让我难以置信——他们不能使用另一个字符串值吗?

@codeape 提交答案后:

亲爱的codeape,根据你的回答,我们有

open Method (IXMLHTTPRequest) 

和现有 VBA 示例(MS 缺少)中的参数全部形成 IXMLHTTPRequest,因此:

Open methods Paramenters --> IXMLHTTPRequest

请确认这是否属实,以便我以更用户友好的方式编辑此帖子,所有已确认的说明供其他人使用。

我也忍不住好奇,为什么我们在 IXMLHTTPRequest 命名中有一个 I?只是想知道...

关于 POST 问题感谢您的回答我搜索了 HTTP 方法并在 W3Schools 中找到了这个简洁的链接,这在很大程度上向我解释了。真的为什么不使用GET?它看起来更快速...而不是提交数据以由指定源(使用 POST)处理,只需从指定源一次性请求数据,它看起来更快捷和简单...


哎呀,我几乎忘记了你给我的打开方法链接以及在 OB 的底部我们看到 bstrMethod As String、bstrUrl As String 等。你能告诉我 bstr 是什么意思吗? - BSTR 是指基本字符串还是二进制字符串?请确认

【问题讨论】:

    标签: excel vba


    【解决方案1】:
    1. XMLHTTP 的文档是here。请注意,文档页面适用于接口 IXMLHTTPRequest。 MSXML.XMLHTTP 实现了这个接口。
    2. Open 方法的第一个参数是 HTTP 方法,即 GET 或 POST(或 PUT、DELETE 等)。

    遗憾的是,在记录各种 COM 库时,MS 似乎忘记了 VBA。大多数/所有文档都是针对 C++ 和 javascript 的。

    对问题中提到的其他内容的评论:

    • IXMLHTTPRequest 中的“I”是 COM 中用于命名接口的命名约定。
    • 关于 HTTP 方法(GET、POST 等):

      • 服务器端代码决定如何解释和响应 HTTP 请求。
      • 当您在浏览器的 URL 栏中键入 URL 时,浏览器会向服务器发送一个 GET 请求。因此,如果您想使用 MSXML.XMLHTTP 获取网页,请执行以下操作:obj.Open "GET", "http://www.google.com"

      • 当您从浏览器提交 HTML 表单时,浏览器可以发送 GET 或 POST 请求,具体取决于 <form> 标记的方法属性。 <form method="GET">(默认)或<form method="POST">

      • 页面上的 Javascript 可以使用 XMLHTTPRequest 和任何 HTTP 方法发送 AJAX 请求。
    • 关于参数名称bstrMethod 等:这是hungarian notation,其中参数的预期类型反映在参数名称中,以便开发人员更轻松地进行操作。 bstr 表示此参数是 COM“basic string”。基本字符串是 COM 通常用于 unicode 字符串的字符串。在 VBA 中,您可以在方法需要 bstr 的地方使用普通 VBA 字符串。

    【讨论】:

    • 我目前正在根据您的答案进行搜索。我会尽快提交任何问题
    • 亲爱的@codeape,自从按照你的指示,我已经重新编辑了我的问题
    • 先生,感谢您的友好(而且非常直观)的帮助!
    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2017-12-25
    相关资源
    最近更新 更多