透過 Excel VBA 模擬 HTTP GET/POST(同步請求)

by 12月 28, 20190 Comments

說明

HTTP(Hypertext Transfer Protocol)是一種通訊協定,用於網頁發出請求(Request)給伺服器(Web Server),HTTP Method分為9種,分別為OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT、DEBUG,以下簡單介紹最常見的GET、POST。
以下範例需開啟發人員頁面,請參考這篇,VBA基礎語法請參考這幾篇

URL格式

GET請求

使用GET的方法會將表單資訊附加在網址,如下圖所示,從問號「?」開始,每一組key/value都是用「&」隔開,且長度不能高過1,024個字元,這是一種不安全的方法,具有高風險性。

使用開發人員工具查看

  1. Chrome瀏覽器按F12
  2. 輸入網址 https://fund.bot.com.tw/w/wr/wr02a.djhtm?customershowall=0&a=ACCH01-4001
  3. 切到Elements頁面可以HTML程式碼

EXCEL VBA範例

  1. 此範例透過GET取得「台灣銀行華頓台灣基金」網頁原始碼,並顯示在彈出式訊息方塊上。
  2. 因為用winhttp需另外打開SSL 2.0 與TLS 2.0,推薦使用xmlhttp
  3. 首先依照這篇開啟開發人員分頁(若已設定請忽略)
  4. 進入VB編輯器,貼上程式碼後,按F5執行,是不是跟從瀏覽器上看到的一樣呢?
Sub Http_Get()

    Dim myXML As Object
    Set myXML = CreateObject("Microsoft.XMLHTTP")

    myXML.Open "GET", "https://fund.bot.com.tw/w/wr/wr02a.djhtm?customershowall=0&a=ACCH01-4001", False

    '通常不需要RequestHeader,若要使用,刪除下一行前後的單引號自行修改'
    'myXML.setRequestHeader "Content-Type", "text/html;charset=big5"'

    myXML.send

    MsgBox (myXML.responseText)
End Sub

POST請求

使用POST方法是將要傳送的資訊放在message-body中,就不用擔心資料大小的限制,使用者也不能直接修改表單資訊。

使用開發人員工具查看

  1. Chrome瀏覽器按F12
  2. 輸入網址https://index.ndc.gov.tw/n/zh_tw/lightscore
  3. 切到Network頁面
  4. 逐一查看每個response是否是您要找的(本範例為lightscore)
  5. 切到Response頁面

EXCEL VBA範例

  1. 此範例透過GET取得「國發會-景氣對策信號」,並顯示在彈出式訊息方塊上。
  2. 首先依照這篇開啟開發人員分頁(若已設定請忽略)
  3. 進入VB編輯器,貼上程式碼後,按F5執行,是不是跟從瀏覽器上看到的一樣呢?
Sub Http_Post()
    Dim objHTTP As Object
    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")

    objHTTP.Open "POST", "https://index.ndc.gov.tw/n/zh_tw/lightscore", False

    '通常不需要RequestHeader,若要使用,刪除下一行前後的單引號自行修改'
    'objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"'
    'objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"'

    '本範例不需要,若要使用,請依下列格式修改(記得刪除下一行前後的單引號)'
    'objHTTP.send ("var1=value1&var2=value2&var3=value3")'
    objHTTP.send

    MsgBox (objHTTP.responseText)
End Sub

0留言

<