註冊
登錄
首頁
論壇版規
禁止列表
說明
地圖
數位書香
私人消息 (0)
公共消息 (0)
論壇任務 (0)
系統消息 (0)
好友消息 (0)
帖子消息 (0)
麻辣家族討論版版
»
Excel程式區
» 使用 XMLHTTP + ADODB.Stream 查詢保戶股權分散表
返回列表
下一主題
上一主題
發帖
[分享]
使用 XMLHTTP + ADODB.Stream 查詢保戶股權分散表
stillfish00
發短消息
加為好友
stillfish00
當前離線
UID
9276
帖子
1018
主題
15
精華
0
積分
1058
金錢
1058
點名
0
作業系統
win7 32bit
軟體版本
Office 2016 64-bit
閱讀權限
50
性別
男
來自
桃園
在線時間
1141 小時
註冊時間
2012-5-9
最後登錄
2022-9-28
大學生
帖子
1018
主題
15
精華
0
積分
1058
點名
0
作業系統
win7 32bit
軟體版本
Office 2016 64-bit
閱讀權限
50
性別
男
來自
桃園
註冊時間
2012-5-9
最後登錄
2022-9-28
1
#
跳轉到
»
發表於 2015-11-12 10:58
|
顯示全部帖子
本帖最後由 stillfish00 於 2015-11-12 11:00 編輯
回復
1#
准提部林
自己也對網頁擷取自行摸索一段時間,以下是個人見解提供參考:
首先,我們要與(網頁)伺服器溝通,是透過對瀏覽器的操作(例如重新整理或網頁上的送出按鈕)
來發出"請求"(request)封包,經由網路傳給伺服器,
伺服器再經由網路返回"響應"(response)給瀏覽器。
這個"請求"封包中包含了 url , method , status , header , body 等等
GET和POST就是請求的方法(method)中最常見的兩種,
最大不同的地方在於:
GET是直接把要傳遞的參數附加在url字串後方
POST是把要傳遞的參數放在body。
假設
sURL = "http://www.tdcc.com.tw/smWeb/QryStock.jsp"
sArg = "SCA_DATE=20151106&SqlMethod=StockNo&StockNo=1101&StockName=&sub=查詢"
sEncodeArg = UrlEncode(sArg)
'UrlEncode : 自訂Function,
'編碼完 sEncodeArg = "SCA_DATE=20151106&SqlMethod=StockNo&StockNo=1101&StockName=&sub=%ACd%B8%DF"
GET附加的文字要經過Url Encode
POST放到body的內容可選擇不同編碼方式,但要在header中說明
所以XML通常會這樣寫:
'GET
.Open "GET" , sURL & "?" & sEncodeArg
.send
複製代碼
'POST
.Open "POST" , sURL
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Content-Length", Len(sEncodeArg)
.send (sEncodeArg)
複製代碼
1. 版主提到的取到舊資料,應是緩存(cache的關係)
可考慮上述GET的send前加上
.setRequestHeader "Pragma", "no-cache"
或
.setRequestHeader "Cache-Control", "no-cache"
告訴網路中的節點(如proxy), 不要用你自己的cache資料返回給我
URL加亂數也是類似道理,因為URL變了不容易有相同URL的cache資料
(但亂數到同一個值還是有機會取到舊的)
2. URL Encode Function,網路上找到的一般應該多是 for "utf-8"的,
無法把 "sub=查詢" 轉成 "sub=%ACd%B8%DF" (所以當初有人問chrome為何無法decode)
http://www.mytju.com/classCode/tools/urlencode_big5.asp
這網站有線上的,可以知道for "big5" url encode 的結果
但不知道編碼邏輯,不好做成自定的 function
1
評分人數
准提部林:
真是菁華出類, 倍增添益, 謝謝!
金錢 + 5
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。
TOP
stillfish00
發短消息
加為好友
stillfish00
當前離線
UID
9276
帖子
1018
主題
15
精華
0
積分
1058
金錢
1058
點名
0
作業系統
win7 32bit
軟體版本
Office 2016 64-bit
閱讀權限
50
性別
男
來自
桃園
在線時間
1141 小時
註冊時間
2012-5-9
最後登錄
2022-9-28
大學生
帖子
1018
主題
15
精華
0
積分
1058
點名
0
作業系統
win7 32bit
軟體版本
Office 2016 64-bit
閱讀權限
50
性別
男
來自
桃園
註冊時間
2012-5-9
最後登錄
2022-9-28
2
#
發表於 2015-11-13 18:11
|
顯示全部帖子
本帖最後由 stillfish00 於 2015-11-13 18:25 編輯
回復
3#
stillfish00
拼拼湊湊推導出來的編碼邏輯,若有發現錯誤請指點下,謝謝。
Function UrlEncode_BIG5(s As String) As String
Dim c As Integer
Dim hiByte As Byte, loByte As Byte
Dim ar
For i = 1 To Len(s)
c = Asc(Mid(s, i, 1))
hiByte = (c And &HFF00&) / &H100
loByte = c And &HFF&
If hiByte = 0 Then ar = Array(loByte) Else ar = Array(hiByte, loByte)
For Each x In ar
If (x >= &H30 And x <= &H39) Or _
(x >= &H41 And x <= &H5A) Or _
(x >= &H61 And x <= &H7A) Then
UrlEncode_BIG5 = UrlEncode_BIG5 & Chr(x)
Else
UrlEncode_BIG5 = UrlEncode_BIG5 & "%" & Hex(x)
End If
Next
Next
End Function
複製代碼
UrlEncode_BIG5("台泥") => "%A5x%AAd"
1
評分人數
准提部林:
看來雖簡單, 不容易呀! 收下了, 謝謝!
金錢 + 5
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。
TOP
靜思自在 :
要批評別人時,先想想自己是否完美無缺。
返回列表
下一主題
上一主題
Excelㄧ般區
進階應用專區
EXCEL專屬討論區
Excelㄧ般區
Excel程式區
進階應用專區
OFFICE 系列
Word
PowerPoint
Access
Office不分區
程式語言
VB 與 VB.Net
C 與 C#
Java 與 J#
程式設計不分區
資料庫
ORACLE
My SQL
MS SQL
網頁設計
ASP 與 ASP.NET
PHP
PHP+MySQL 入門實作
JavaScript
FLASH / ActionScript
HTM/ HTML/ CSS
網頁設計不分區
電腦與作業系統
電腦各種硬體討論
一般電腦軟體討論
論壇事務
管理公告
投訴反映
新手測試
愛 • 生活
公益佈告欄
生活與感動
[收藏此主題]
[關注此主題的新回復]
[通過 QQ、MSN 分享給朋友]
申請友情鏈接
Facebook粉絲