2013-08-07 12 views
5

Ich versuche, eine einfache Post-Anfrage in der Hauptsuchleiste von http://forums.egullet.org/ zu tun. (Dies ist ein Beispiel, aber ich versuche, ein Werkzeug zu bauen, das mit vielen funktioniert.)Pass-Parameter in VBA HTTP-Post-Anfrage

Das Problem ist, dass ich nicht scheinen kann, den richtigen Weg zu finden, um die Parameter zu strukturieren/platzieren, so dass die Server verarbeitet meine Anfrage. (Ich bekomme eine Antwort, aber es ist nur eine Seite, die mich auffordert, die Suche erneut zu versuchen, anstatt das Ergebnis, das ich bekomme, wenn ich die Suche in einem Browser durchführe. Die Argument-Zeichenkette wurde gerade aus Firebug gezogen, also bin ich fair Sicher, dass es richtig ist, ich habe nur den Eindruck, dass ich es nicht an die richtige Stelle bringe/es richtig strukturiere/alles sage, was ich brauche, aber ich weiß nicht, was ich ändern soll diese Arbeiten durch das DOM eines Internet-Explorer-Objekt bearbeiten, aber ich versuche zu XMLHTTP zu wechseln, weil es viel schneller/zuverlässiger. Vielen Dank für Ihre Hilfe!

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 

Antwort

5

ich glaube, Sie ein kaufmännisches brauchen, wo Sie ein Fragezeichen

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

Um es prägnanter zu machen und den Titel dieser Zielseite erhalten:

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