2013-08-07 44 views
5

Tôi đang cố gắng thực hiện một yêu cầu đăng đơn giản trên thanh tìm kiếm chính của http://forums.egullet.org/. (Đây là một ví dụ, nhưng tôi đang cố gắng xây dựng một công cụ sẽ hoạt động được với nhiều người.)Vượt qua các tham số trong yêu cầu đăng bài HTTP của VBA

Vấn đề là tôi dường như không tìm ra đúng cách để cấu trúc/đặt các tham số sao cho máy chủ xử lý yêu cầu của tôi. (Tôi nhận được phản hồi, nhưng nó chỉ là một trang yêu cầu tôi thử lại tìm kiếm, chứ không phải kết quả tôi nhận được khi tôi thực hiện tìm kiếm trong trình duyệt. Chuỗi đối số được kéo thẳng ra khỏi con bọ lửa, vì vậy tôi khá Tôi chỉ nhận được ấn tượng rằng tôi không đặt nó vào đúng nơi/cấu trúc nó một cách chính xác/nói tất cả mọi thứ mà tôi cần, nhưng tôi không biết phải thay đổi điều gì. làm việc này bằng cách chỉnh sửa DOM của một đối tượng internet explorer, nhưng tôi đang cố gắng để chuyển sang XMLHTTP vì nó nhanh hơn nhiều/đáng tin cậy hơn. Nhờ sự giúp đỡ của bạn!

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 

Trả lời

5

tôi nghĩ rằng bạn cần một dấu nơi bạn có dấu chấm hỏi

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

Để làm cho nó ngắn gọn hơn và có được tiêu đề của trang đích đó:

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