автоматизировать отправку формы сообщения на веб-сайте с помощью vba и xmlhttp - PullRequest
3 голосов
/ 10 января 2012

Я использую xmlhttp через VBA в Excel 2010. Мне нужно программно добавить товар в корзину на веб-сайте. Пока у меня есть код ниже, он использует POST метод

Несколько вещей, которые я считаю неправильными в моем коде, но не уверены, как их исправить - это не показывает, где находится форма, которая отправляется. Вот этот URL:

http://www.craft -e-corner.com / p-2688-новый-завет-картридж-картридж.aspx

URL-адрес, который я ввел в качестве URL-адреса, обрабатывающего форму, - это URL-адрес в части "action =" формы "form".

Как я могу проверить, что форма размещена?

Sub post_frm()
Dim xmlhttp As Object
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
' Indicate that page that will receive the request and the
' type of request being submitted
xmlhttp.Open "POST", "http://www.craft-e-corner.com/addtocart.aspx?returnurl=showproduct.aspx%3fProductID%3d2688%26SEName%3dnew-testament-cricut-cartridge", False
' Indicate that the body of the request contains form data
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
' Send the data as name/value pairs
xmlhttp.send "Quantity=1&VariantID=2705&ProductID=2688"
Set xmlhttp = Nothing
End Sub

Ответы [ 2 ]

9 голосов
/ 10 января 2012

В коде нет ничего плохого.:) Я проверил это, и он отлично работает.Ошибка может быть где-то еще.

Я просто немного подправил код, чтобы использовать IE для проверки вывода, и теперь он работает просто отлично :) Я тестировал его в Excel 2007 на данный момент.Скоро опробую его в 2010 году.Кстати, какую версию IE вы используете?

Вот код, который я тестировал, и он прекрасно работает.

Option Explicit

Sub post_frm()

    Dim objIE As Object, xmlhttp As Object
    Dim response As String

    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.navigate "about:blank"
    objIE.Visible = True

    Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")

    '~~> Indicates that page that will receive the request and the type of request being submitted
    xmlhttp.Open "POST", "http://www.craft-e-corner.com/addtocart.aspx?returnurl=showproduct.aspx%3fProductID%3d2688%26SEName%3dnew-testament-cricut-cartridge", False
    '~~> Indicate that the body of the request contains form data
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    '~~> Send the data as name/value pairs
    xmlhttp.Send "Quantity=1&VariantID=2705&ProductID=2688"

    response = xmlhttp.responseText
    objIE.document.Write response

    Set xmlhttp = Nothing

End Sub

С уважением

Sid

1 голос
/ 29 ноября 2018

Вариант другого ответа работает для меня без необходимости в IE.

Sub Post_HTTP_Form()
'Requires reference to "Microsoft XML, v6.0" or better. (Tools>References)
    Dim msXML As New XMLHTTP60, resp As String
    With msXML
        .Open "POST", "{http://YOUR_URL_HERE.com}", False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .Send "{PARAMETER}={VALUE}" 
        resp = StrConv(.responseBody, vbUnicode)
    End With
    Debug.Print resp 'outputs to Immediate Window (CTRL+G to view)
    Set msXML = Nothing
End Sub

Просто замените три значения в {фигурных скобках}.


... и поздняя версия версия:

Sub Post_HTTP_Form()
    Dim msXML As Object, resp As String
    Set msXML = CreateObject("MSXML2.ServerXMLHTTP")
    With msXML
        .Open "POST", "{http://YOUR_URL_HERE.com}", False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .Send "{PARAMETER}={VALUE}" 
        resp = StrConv(.responseBody, vbUnicode)
    End With
    Debug.Print resp 'outputs to Immediate Window (CTRL+G to view)
    Set msXML = Nothing
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...