在 VBA HTTP Post 请求中传递参数

Posted

技术标签:

【中文标题】在 VBA HTTP Post 请求中传递参数【英文标题】:Pass Parameters in VBA HTTP Post Request 【发布时间】:2013-08-09 07:56:56 【问题描述】:

我正在尝试在http://forums.egullet.org/ 的主搜索栏上进行简单的发布请求。 (这是一个例子,但我正在尝试构建一种适用于许多人的工具。)

问题是我似乎无法找出正确的方法来构造/放置参数以便服务器处理我的请求。 (我确实收到了响应,但这只是一个页面要求我再次尝试搜索,而不是我在浏览器中进行搜索时得到的结果。参数字符串是直接从 firebug 中提取的,所以我很公平确定它是正确的。我只是觉得我没有把它放在正确的位置/正确地构造它/说出我需要的一切,但我不知道要改变什么。值得注意的是,我以前有这通过编辑 Internet Explorer 对象的 DOM 来工作,但我正在尝试切换到 XMLHTTP,因为它更快/更可靠。感谢您的帮助!

Sub httpPost()
Dim XMLHTTP
Dim result As String
Dim argumentString
argumentString = "?search_term=eggs&search_app=forums"
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
XMLHTTP.Open "POST", _
    "http://forums.egullet.org/index.php?app=core&module=search&do=search&fromMainBar=1", False
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
XMLHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
XMLHTTP.send argumentString
result = XMLHTTP.responsetext
Set XMLHTTP = Nothing
End Sub

【问题讨论】:

【参考方案1】:

我认为你需要一个带问号的 & 符号

argumentString = "&search_term=eggs&search_app=forums"

【讨论】:

【参考方案2】:

为了更简洁,获取目标页面的标题:

Sub httpPost()
    Dim http As New XMLHTTP60, html As New HTMLDocument
    Dim post As Object, argstr As String

    argstr = "type=all&q=eggs"

    With http
        .Open "POST", "https://forums.egullet.org/search/?", False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
        .setRequestHeader "Content-type", "application/x-www-form-urlencoded"
        .send argstr
        html.body.innerHTML = .responseText
    End With

    For Each post In html.getElementsByClassName("ipsStreamItem_title")
        With post.getElementsByTagName("a")
            If .Length Then Row = Row + 1: Cells(Row, 1) = .Item(0).innerText
        End With
    Next post
End Sub

【讨论】:

以上是关于在 VBA HTTP Post 请求中传递参数的主要内容,如果未能解决你的问题,请参考以下文章

HTTP中get请求与post请求区别

什么步骤可以用post向网络传递多个参数

POST 参数未使用 VBA 传递给 Web API

如何利用jQuery post传递含特殊字符的数据

struts2怎样获取AJAX post请求传递的数据

如何通过远程方法发送 json-rpc http post 请求并在 java 中传递加密参数