透過 Excel VBA 模擬 HTTP GET/POST(同步請求)
說明
HTTP(Hypertext Transfer Protocol)是一種通訊協定,用於網頁發出請求(Request)給伺服器(Web Server),HTTP Method分為9種,分別為OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT、DEBUG,以下簡單介紹最常見的GET、POST。
以下範例需開啟發人員頁面,請參考這篇,VBA基礎語法請參考這幾篇
URL格式
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixw-jZjYD5s49imuNX8e8XWecSV67hmKnqMYWlNipDUJ0En-hCvmrJDAiONreqIfD6AahmAaC3bFfUvSaMa2lMBYam-uKrzUVw9epPPJS6v0xKqU_GeGpn31ss1cM5X6A6vwMaf-7TqBF9/w600/URL_format.jpg)
GET請求
使用GET的方法會將表單資訊附加在網址,如下圖所示,從問號「?」開始,每一組key/value都是用「&」隔開,且長度不能高過1,024個字元,這是一種不安全的方法,具有高風險性。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPfXhB5d9d-XtVTUmw3C7mAHdj0ihnxnmFvcRod9b6vmTwWte3pilrX_ZafHkHpvrD39TmvjEnI2vWc5VFiPNJYqhXbRkVIcdVQgyjxcLU26hocUAebbFPKHoRbbjuBDtpNZq8T9qcqUAk/w600/01.jpg)
使用開發人員工具查看
- Chrome瀏覽器按F12
- 輸入網址 https://fund.bot.com.tw/w/wr/wr02a.djhtm?customershowall=0&a=ACCH01-4001
- 切到Elements頁面可以HTML程式碼
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFNGk5iqZ8QaYB7x_-g0VN8-gUtvzhyphenhyphenY2fyAOedaEUMJGPLvGLLO25a8y-gItbyNW-mV68XHhDP2GOK2lUA_H9sCgL7sI7wwh_QBi18NSXGuxWlReiDj_CJhQ59Ik3wL7qgF9fX8ncXxQR/w600/03.jpg)
EXCEL VBA範例
- 此範例透過GET取得「台灣銀行華頓台灣基金」網頁原始碼,並顯示在彈出式訊息方塊上。
- 因為用winhttp需另外打開SSL 2.0 與TLS 2.0,推薦使用xmlhttp
- 首先依照這篇開啟開發人員分頁(若已設定請忽略)
- 進入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中,就不用擔心資料大小的限制,使用者也不能直接修改表單資訊。
使用開發人員工具查看
- Chrome瀏覽器按F12
- 輸入網址https://index.ndc.gov.tw/n/zh_tw/lightscore
- 切到Network頁面
- 逐一查看每個response是否是您要找的(本範例為lightscore)
- 切到Response頁面
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxaOrMkJsqmytqv8uK-IEIlB_YgxQyjEc_EbHFbSR_WT-XOTfF6PRpOE93e8ZNPH2dcZeJB9EAWeyqHw1kJgvRLo3Y_tqzmglVdowCG1K93cLGjrNPkSECPRB_ZKUzhGHb76i3GtNNXb2A/w600/04.jpg)
EXCEL VBA範例
- 此範例透過GET取得「國發會-景氣對策信號」,並顯示在彈出式訊息方塊上。
- 首先依照這篇開啟開發人員分頁(若已設定請忽略)
- 進入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留言