Передать параметры в VBA HTTP Post Request

Я пытаюсь сделать простой почтовый запрос на главной панели поиска http://forums.egullet.org/. (Это один из примеров, но я пытаюсь создать инструмент, который будет работать со многими.)

Проблема в том, что я не могу понять, как правильно структурировать / разместить параметры так, чтобы сервер обрабатывал мой запрос. (Я получаю ответ, но это просто страница с просьбой повторить поиск, а не результат, который я получаю при поиске в браузере. Строка аргумента была извлечена прямо из firebug, так что я довольно уверен, что это правильно. У меня просто складывается впечатление, что я не помещаю это в нужное место / структурирую это правильно / говорю все, что мне нужно, но я не знаю, что изменить. Стоит отметить, что раньше у меня было Это работает путем редактирования DOM объекта Internet Explorer, но я пытаюсь переключиться на 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

2 ответа

Решение

Я думаю, что вам нужен амперсанд, где у вас есть знак вопроса

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

Чтобы сделать его более кратким и получить заголовок этой целевой страницы:

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
Другие вопросы по тегам