2013-08-07 10 views
5

Próbuję wykonać prostą prośbę o wpis na głównym pasku wyszukiwania pod numerem http://forums.egullet.org/. (Jest to jeden przykład, ale staram się zbudować narzędzie, które będzie działać z wieloma).Parametry przekazywania w żądaniu HTTP HTTP VBA

Problem polega na tym, że nie potrafię wymyślić właściwego sposobu ułożenia/umieszczenia parametrów w taki sposób, aby serwer przetwarza moje żądanie. (Dostaję odpowiedź, ale jest to tylko strona, która prosi mnie o ponowne przeszukanie, a nie wynik uzyskany podczas wyszukiwania w przeglądarce, ciąg argumentów został wyciągnięty prosto z firebuga, więc jestem dość Jestem pewien, że to jest poprawne, po prostu odnoszę wrażenie, że nie umieszczam go we właściwym miejscu/porządkując go poprawnie/mówiąc wszystko, co muszę, ale nie wiem co zmienić. Warto zauważyć, że wcześniej miałem to roboczego poprzez edycję DOM obiektu Internet Explorer, ale staram się przejść do XMLHTTP, bo to o wiele szybciej/bardziej wiarygodne. Dzięki za pomoc!

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 

Odpowiedz

5

myślę, że trzeba się ampersanda gdzie trzeba znak zapytania:

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

Aby uczynić go bardziej zwięzły i uzyskać tytuł tej strony docelowe:

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 
Powiązane problemy